<!DOCTYPE html><html lang="en" data-theme="light"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0,viewport-fit=cover"><title>linux 常用 | Lyra</title><meta name="author" content="lyra"><meta name="copyright" content="lyra"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="#ffffff"><meta name="description" content="linux文件结构   &#x2F;bin：bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。  &#x2F;boot：这里存放的是启动 Linux 时使用的一些核心文件，包括一些连接文件以及镜像文件。  &#x2F;dev ：dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备，在 Linux 中访问设备的方式和访问文件的方式">
<meta property="og:type" content="article">
<meta property="og:title" content="linux 常用">
<meta property="og:url" content="https://gitee.com/Lyra3/blog/2023/09/07/linux%E5%B8%B8%E7%94%A8/index.html">
<meta property="og:site_name" content="Lyra">
<meta property="og:description" content="linux文件结构   &#x2F;bin：bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。  &#x2F;boot：这里存放的是启动 Linux 时使用的一些核心文件，包括一些连接文件以及镜像文件。  &#x2F;dev ：dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备，在 Linux 中访问设备的方式和访问文件的方式">
<meta property="og:locale" content="en_US">
<meta property="og:image" content="https://gitee.com/Lyra3/blog/img/avatar.png">
<meta property="article:published_time" content="2023-09-06T22:42:27.000Z">
<meta property="article:modified_time" content="2023-09-07T03:15:02.167Z">
<meta property="article:author" content="lyra">
<meta property="article:tag" content="Linux 常用">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://gitee.com/Lyra3/blog/img/avatar.png"><link rel="shortcut icon" href="/blog/img/favicon1.png"><link rel="canonical" href="https://gitee.com/Lyra3/blog/2023/09/07/linux%E5%B8%B8%E7%94%A8/index.html"><link rel="preconnect" href="//cdn.jsdelivr.net"/><link rel="preconnect" href="//busuanzi.ibruce.info"/><link rel="stylesheet" href="/blog/css/index.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free/css/all.min.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox/fancybox.min.css" media="print" onload="this.media='all'"><script>const GLOBAL_CONFIG = {
  root: '/blog/',
  algolia: undefined,
  localSearch: undefined,
  translate: undefined,
  noticeOutdate: undefined,
  highlight: {"plugin":"highlighjs","highlightCopy":true,"highlightLang":true,"highlightHeightLimit":false},
  copy: {
    success: 'Copy successfully',
    error: 'Copy error',
    noSupport: 'The browser does not support'
  },
  relativeDate: {
    homepage: false,
    post: false
  },
  runtime: '',
  dateSuffix: {
    just: 'Just',
    min: 'minutes ago',
    hour: 'hours ago',
    day: 'days ago',
    month: 'months ago'
  },
  copyright: undefined,
  lightbox: 'fancybox',
  Snackbar: undefined,
  source: {
    justifiedGallery: {
      js: 'https://cdn.jsdelivr.net/npm/flickr-justified-gallery/dist/fjGallery.min.js',
      css: 'https://cdn.jsdelivr.net/npm/flickr-justified-gallery/dist/fjGallery.min.css'
    }
  },
  isPhotoFigcaption: false,
  islazyload: false,
  isAnchor: false,
  percent: {
    toc: true,
    rightside: false,
  },
  autoDarkmode: false
}</script><script id="config-diff">var GLOBAL_CONFIG_SITE = {
  title: 'linux 常用',
  isPost: true,
  isHome: false,
  isHighlightShrink: false,
  isToc: true,
  postUpdate: '2023-09-07 11:15:02'
}</script><noscript><style type="text/css">
  #nav {
    opacity: 1
  }
  .justified-gallery img {
    opacity: 1
  }

  #recent-posts time,
  #post-meta time {
    display: inline !important
  }
</style></noscript><script>(win=>{
    win.saveToLocal = {
      set: function setWithExpiry(key, value, ttl) {
        if (ttl === 0) return
        const now = new Date()
        const expiryDay = ttl * 86400000
        const item = {
          value: value,
          expiry: now.getTime() + expiryDay,
        }
        localStorage.setItem(key, JSON.stringify(item))
      },

      get: function getWithExpiry(key) {
        const itemStr = localStorage.getItem(key)

        if (!itemStr) {
          return undefined
        }
        const item = JSON.parse(itemStr)
        const now = new Date()

        if (now.getTime() > item.expiry) {
          localStorage.removeItem(key)
          return undefined
        }
        return item.value
      }
    }
  
    win.getScript = url => new Promise((resolve, reject) => {
      const script = document.createElement('script')
      script.src = url
      script.async = true
      script.onerror = reject
      script.onload = script.onreadystatechange = function() {
        const loadState = this.readyState
        if (loadState && loadState !== 'loaded' && loadState !== 'complete') return
        script.onload = script.onreadystatechange = null
        resolve()
      }
      document.head.appendChild(script)
    })
  
    win.getCSS = (url,id = false) => new Promise((resolve, reject) => {
      const link = document.createElement('link')
      link.rel = 'stylesheet'
      link.href = url
      if (id) link.id = id
      link.onerror = reject
      link.onload = link.onreadystatechange = function() {
        const loadState = this.readyState
        if (loadState && loadState !== 'loaded' && loadState !== 'complete') return
        link.onload = link.onreadystatechange = null
        resolve()
      }
      document.head.appendChild(link)
    })
  
      win.activateDarkMode = function () {
        document.documentElement.setAttribute('data-theme', 'dark')
        if (document.querySelector('meta[name="theme-color"]') !== null) {
          document.querySelector('meta[name="theme-color"]').setAttribute('content', '#0d0d0d')
        }
      }
      win.activateLightMode = function () {
        document.documentElement.setAttribute('data-theme', 'light')
        if (document.querySelector('meta[name="theme-color"]') !== null) {
          document.querySelector('meta[name="theme-color"]').setAttribute('content', '#ffffff')
        }
      }
      const t = saveToLocal.get('theme')
    
          if (t === 'dark') activateDarkMode()
          else if (t === 'light') activateLightMode()
        
      const asideStatus = saveToLocal.get('aside-status')
      if (asideStatus !== undefined) {
        if (asideStatus === 'hide') {
          document.documentElement.classList.add('hide-aside')
        } else {
          document.documentElement.classList.remove('hide-aside')
        }
      }
    
    const detectApple = () => {
      if(/iPad|iPhone|iPod|Macintosh/.test(navigator.userAgent)){
        document.documentElement.classList.add('apple')
      }
    }
    detectApple()
    })(window)</script><meta name="generator" content="Hexo 6.3.0"><link rel="alternate" href="/blog/atom.xml" title="Lyra" type="application/atom+xml">
</head><body><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="avatar-img is-center"><img src="/blog/img/avatar.png" onerror="onerror=null;src='/img/friend_404.gif'" alt="avatar"/></div><div class="sidebar-site-data site-data is-center"><a href="/blog/archives/"><div class="headline">Articles</div><div class="length-num">4</div></a><a href="/blog/tags/"><div class="headline">Tags</div><div class="length-num">2</div></a><a href="/blog/categories/"><div class="headline">Categories</div><div class="length-num">4</div></a></div><hr class="custom-hr"/><div class="menus_items"><div class="menus_item"><a class="site-page" href="/blog/"><i class="fa-fw fas fa-home"></i><span> Home</span></a></div><div class="menus_item"><a class="site-page" href="/blog/archives/"><i class="fa-fw fas fa-archive"></i><span> Archives</span></a></div><div class="menus_item"><a class="site-page" href="/blog/tags/"><i class="fa-fw fas fa-tags"></i><span> Tags</span></a></div><div class="menus_item"><a class="site-page" href="/blog/categories/"><i class="fa-fw fas fa-folder-open"></i><span> Categories</span></a></div></div></div></div><div class="post" id="body-wrap"><header class="post-bg" id="page-header"><nav id="nav"><span id="blog-info"><a href="/blog/" title="Lyra"><span class="site-name">Lyra</span></a></span><div id="menus"><div class="menus_items"><div class="menus_item"><a class="site-page" href="/blog/"><i class="fa-fw fas fa-home"></i><span> Home</span></a></div><div class="menus_item"><a class="site-page" href="/blog/archives/"><i class="fa-fw fas fa-archive"></i><span> Archives</span></a></div><div class="menus_item"><a class="site-page" href="/blog/tags/"><i class="fa-fw fas fa-tags"></i><span> Tags</span></a></div><div class="menus_item"><a class="site-page" href="/blog/categories/"><i class="fa-fw fas fa-folder-open"></i><span> Categories</span></a></div></div><div id="toggle-menu"><a class="site-page" href="javascript:void(0);"><i class="fas fa-bars fa-fw"></i></a></div></div></nav><div id="post-info"><h1 class="post-title">linux 常用</h1><div id="post-meta"><div class="meta-firstline"><span class="post-meta-date"><i class="far fa-calendar-alt fa-fw post-meta-icon"></i><span class="post-meta-label">Created</span><time class="post-meta-date-created" datetime="2023-09-06T22:42:27.000Z" title="Created 2023-09-07 06:42:27">2023-09-07</time><span class="post-meta-separator">|</span><i class="fas fa-history fa-fw post-meta-icon"></i><span class="post-meta-label">Updated</span><time class="post-meta-date-updated" datetime="2023-09-07T03:15:02.167Z" title="Updated 2023-09-07 11:15:02">2023-09-07</time></span><span class="post-meta-categories"><span class="post-meta-separator">|</span><i class="fas fa-inbox fa-fw post-meta-icon"></i><a class="post-meta-categories" href="/blog/categories/linux/">linux</a></span></div><div class="meta-secondline"><span class="post-meta-separator">|</span><span class="post-meta-pv-cv" id="" data-flag-title="linux 常用"><i class="far fa-eye fa-fw post-meta-icon"></i><span class="post-meta-label">Post View:</span><span id="busuanzi_value_page_pv"><i class="fa-solid fa-spinner fa-spin"></i></span></span></div></div></div></header><main class="layout" id="content-inner"><div id="post"><article class="post-content" id="article-container"><h1 id="linux文件结构"><a href="#linux文件结构" class="headerlink" title="linux文件结构"></a>linux文件结构</h1><img src="/blog/2023/09/07/linux%E5%B8%B8%E7%94%A8/linux%E6%96%87%E4%BB%B6%E7%BB%93%E6%9E%84.jpg" class="" title="img">

<ul>
<li><p><strong>&#x2F;bin</strong>：<br>bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。</p>
</li>
<li><p><strong>&#x2F;boot：</strong><br>这里存放的是启动 Linux 时使用的一些核心文件，包括一些连接文件以及镜像文件。</p>
</li>
<li><p><strong>&#x2F;dev ：</strong><br>dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备，在 Linux 中访问设备的方式和访问文件的方式是相同的。</p>
</li>
<li><p><strong>&#x2F;etc：</strong><br>etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。</p>
</li>
<li><p><strong>&#x2F;home</strong>：<br>用户的主目录，在 Linux 中，每个用户都有一个自己的目录，一般该目录名是以用户的账号命名的，如上图中的 alice、bob 和 eve。</p>
</li>
<li><p><strong>&#x2F;lib</strong>：<br>lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库，其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。</p>
</li>
<li><p><strong>&#x2F;lost+found</strong>：<br>这个目录一般情况下是空的，当系统非法关机后，这里就存放了一些文件。</p>
</li>
<li><p><strong>&#x2F;media</strong>：<br>linux 系统会自动识别一些设备，例如U盘、光驱等等，当识别后，Linux 会把识别的设备挂载到这个目录下。</p>
</li>
<li><p><strong>&#x2F;mnt</strong>：<br>系统提供该目录是为了让用户临时挂载别的文件系统的，我们可以将光驱挂载在 &#x2F;mnt&#x2F; 上，然后进入该目录就可以查看光驱里的内容了。</p>
</li>
<li><p><strong>&#x2F;opt</strong>：<br>opt 是 optional(可选) 的缩写，这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。</p>
</li>
<li><p><strong>&#x2F;proc</strong>：<br>proc 是 Processes(进程) 的缩写，&#x2F;proc 是一种伪文件系统（也即虚拟文件系统），存储的是当前内核运行状态的一系列特殊文件，这个目录是一个虚拟的目录，它是系统内存的映射，我们可以通过直接访问这个目录来获取系统信息。<br>这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件，比如可以通过下面的命令来屏蔽主机的ping命令，使别人无法ping你的机器：</p>
</li>
<li><p><strong>&#x2F;root</strong>：<br>该目录为系统管理员，也称作超级权限者的用户主目录。</p>
</li>
<li><p><strong>&#x2F;sbin</strong>：<br>s 就是 Super User 的意思，是 Superuser Binaries (超级用户的二进制文件) 的缩写，这里存放的是系统管理员使用的系统管理程序。</p>
</li>
<li><p><strong>&#x2F;selinux</strong>：<br>这个目录是 Redhat&#x2F;CentOS 所特有的目录，Selinux 是一个安全机制，类似于 windows 的防火墙，但是这套机制比较复杂，这个目录就是存放selinux相关的文件的。</p>
</li>
<li><p><strong>&#x2F;srv</strong>：<br>该目录存放一些服务启动之后需要提取的数据。</p>
</li>
<li><p><strong>&#x2F;sys</strong>：</p>
<p>这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。</p>
<p>sysfs 文件系统集成了下面3种文件系统的信息：针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。</p>
<p>该文件系统是内核设备树的一个直观反映。</p>
<p>当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中被创建。</p>
</li>
<li><p><strong>&#x2F;tmp</strong>：<br>tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。</p>
</li>
<li><p><strong>&#x2F;usr</strong>：<br>usr 是 unix shared resources(共享资源) 的缩写，这是一个非常重要的目录，用户的很多应用程序和文件都放在这个目录下，类似于 windows 下的 program files 目录。</p>
</li>
<li><p><strong>&#x2F;usr&#x2F;bin：</strong><br>系统用户使用的应用程序。</p>
</li>
<li><p><strong>&#x2F;usr&#x2F;sbin：</strong><br>超级用户使用的比较高级的管理程序和系统守护程序。</p>
</li>
<li><p><strong>&#x2F;usr&#x2F;src：</strong><br>内核源代码默认的放置目录。</p>
</li>
<li><p><strong>&#x2F;var</strong>：<br>var 是 variable(变量) 的缩写，这个目录中存放着在不断扩充着的东西，我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。</p>
</li>
<li><p><strong>&#x2F;run</strong>：<br>是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 &#x2F;var&#x2F;run 目录，应该让它指向 run。</p>
</li>
</ul>
<blockquote>
<p>在 Linux 系统中，有几个目录是比较重要的，平时需要注意不要误删除或者随意更改内部文件。</p>
<p><strong>&#x2F;etc</strong>： 上边也提到了，这个是系统中的配置文件，如果你更改了该目录下的某个文件可能会导致系统不能启动。</p>
<p><strong>&#x2F;bin, &#x2F;sbin, &#x2F;usr&#x2F;bin, &#x2F;usr&#x2F;sbin</strong>: 这是系统预设的执行文件的放置目录，比如 <strong>ls</strong> 就是在 <strong>&#x2F;bin&#x2F;ls</strong> 目录下的。</p>
<p>值得提出的是 <strong>&#x2F;bin</strong>、**&#x2F;usr&#x2F;bin** 是给系统用户使用的指令（除 root 外的通用用户），而&#x2F;sbin, &#x2F;usr&#x2F;sbin 则是给 root 使用的指令。</p>
<p><strong>&#x2F;var</strong>： 这是一个非常重要的目录，系统上跑了很多程序，那么每个程序都会有相应的日志产生，而这些日志就被记录到这个目录下，具体在 &#x2F;var&#x2F;log 目录下，另外 mail 的预设放置也是在这里。</p>
</blockquote>
<p>首先注意 usr 指 Unix System Resource，而不是user<br>&#x2F;usr&#x2F;bin<br>系统预装的一些可执行程序，随系统升级会改变</p>
<p>&#x2F;usr&#x2F;local&#x2F;bin<br>用户安装的可执行程序，不受系统升级影响，用户编译安装软件时，一般放到&#x2F;usr&#x2F;local目录下</p>
<p>如果两个目录下有相同的可执行程序，谁优先执行会受到PATH环境变量的影响，举个栗子：<br>echo $PATH查看当前 PATH 环境变量<br>&#x2F;usr&#x2F;local&#x2F;sbin:&#x2F;usr&#x2F;local&#x2F;bin:&#x2F;usr&#x2F;sbin:&#x2F;usr&#x2F;bin:&#x2F;root&#x2F;.local&#x2F;bin:&#x2F;root&#x2F;bin:&#x2F;usr&#x2F;local&#x2F;src&#x2F;nodejs&#x2F;bin:&#x2F;usr&#x2F;local&#x2F;git&#x2F;bin:&#x2F;usr&#x2F;bin&#x2F;git&#x2F;bin<br>这里 &#x2F;usr&#x2F;local&#x2F;git&#x2F;bin 优先于 &#x2F;usr&#x2F;bin&#x2F;git&#x2F;bin</p>
<p>&#x2F;bin 存放所有用户皆可用的系统程序，系统启动或者系统修复时可用（在没有挂载 &#x2F;usr 目录时就可以使用）</p>
<p>&#x2F;sbin 存放超级用户才能使用的系统程序</p>
<p>&#x2F;usr&#x2F;bin 存放所有用户都可用的应用程序</p>
<p>&#x2F;usr&#x2F;sbin 存放超级用户才能使用的应用程序</p>
<p>&#x2F;usr&#x2F;local&#x2F;bin 存放所有用户都可用的与本地机器无关的程序</p>
<p>&#x2F;usr&#x2F;local&#x2F;sbin 存放超级用户才能使用的与本地机器无关的程序</p>
<h1 id="文件目录指令"><a href="#文件目录指令" class="headerlink" title="文件目录指令"></a>文件目录指令</h1><h2 id="ls"><a href="#ls" class="headerlink" title="ls"></a>ls</h2><blockquote>
<p>Linux <strong>ls</strong>（英文全拼： list directory contents）命令用于显示指定工作目录下之内容（列出目前工作目录所含的文件及子目录)。</p>
</blockquote>
<h3 id="参数"><a href="#参数" class="headerlink" title="参数"></a><strong>参数</strong></h3><ul>
<li>-a 显示所有文件及目录 (<strong>.</strong> 开头的隐藏文件也会列出)</li>
<li>-d 只列出目录（不递归列出目录内的文件）。</li>
<li>-l 以长格式显示文件和目录信息，包括权限、所有者、大小、创建时间等。</li>
<li>-r 倒序显示文件和目录。</li>
<li>-t 将按照修改时间排序，最新的文件在最前面。</li>
<li>-A 同 -a ，但不列出 “.” (目前目录) 及 “..” (父目录)</li>
<li>-F 在列出的文件名称后加一符号；例如可执行档则加 “*”, 目录则加 “&#x2F;“</li>
<li>-R 递归显示目录中的所有文件和子目录。</li>
</ul>
<h3 id="其他"><a href="#其他" class="headerlink" title="其他"></a>其他</h3><p>当文件名包含空格、特殊字符或者开始字符为破折号时，可以使用反斜杠（\）进行转义，或者使用引号将文件名括起来。例如：</p>
<blockquote>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">ls &quot;linux常用 file.txt&quot;    # 列出文件名为&quot;linux常用 file.txt&quot;的文件</span><br><span class="line">ls linux常用\ file.txt     # 列出文件名为&quot;linux常用 file.txt&quot;的文件</span><br></pre></td></tr></table></figure>
</blockquote>
<p>ls 命令还可以使用通配符进行模式匹配，例如 ***** 表示匹配任意字符，**?** 表示匹配一个字符，**[…]** 表示匹配指定范围内的字符。例如：</p>
<blockquote>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">ls *.txt         # 列出所有扩展名为.txt的文件</span><br><span class="line">ls file?.txt     # 列出文件名为file?.txt的文件，其中?表示任意一个字符</span><br><span class="line">ls [abc]*.txt    # 列出以a、b或c开头、扩展名为.txt的文件</span><br></pre></td></tr></table></figure>
</blockquote>
<p>在使用 <strong>ls -l</strong> 命令时，第一列的字符表示文件或目录的类型和权限。其中第一个字符表示文件类型，例如：</p>
<blockquote>
<ul>
<li>- 表示普通文件</li>
<li>d 表示目录</li>
<li>l 表示符号链接</li>
<li>c 表示字符设备文件</li>
<li>b 表示块设备文件</li>
<li>s 表示套接字文件</li>
<li>p 表示管道文件</li>
</ul>
</blockquote>
<h3 id="示例"><a href="#示例" class="headerlink" title="示例"></a>示例</h3><h4 id="示例1-所有子目录"><a href="#示例1-所有子目录" class="headerlink" title="示例1(所有子目录)"></a>示例1(所有子目录)</h4><p>列出 <code>/home/yiibai</code>文件夹下的所有文件和目录(包括子目录的文件)的详细资料，命令：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ls -lR /home/yiibai</span><br></pre></td></tr></table></figure>

<h4 id="示例2-通配符"><a href="#示例2-通配符" class="headerlink" title="示例2(通配符)"></a>示例2(通配符)</h4><p>列出当前目录中所有以“t”开头的目录的详细内容，可以使用如下命令：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ls -l t*</span><br></pre></td></tr></table></figure>

<h4 id="示例3-子目录"><a href="#示例3-子目录" class="headerlink" title="示例3(子目录)"></a>示例3(子目录)</h4><p>只列出文件下的子目录</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ls -F /usr/local/ |grep /$</span><br></pre></td></tr></table></figure>

<h4 id="示例4-通配符"><a href="#示例4-通配符" class="headerlink" title="示例4(通配符)"></a>示例4(通配符)</h4><p>列出目前工作目录下所有名称是以 <code>s</code>开头的档案，越新的排越后面，可以使用如下命令：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ls -ltr s*</span><br></pre></td></tr></table></figure>

<h4 id="示例5-执行文件-目录"><a href="#示例5-执行文件-目录" class="headerlink" title="示例5(执行文件&#x2F;目录)"></a>示例5(执行文件&#x2F;目录)</h4><p>列出目前工作目录下所有档案及目录;目录于名称后加”<code>/</code>“, 可执行档于名称后加”<code>*</code>“<br>命令：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ls -AF</span><br></pre></td></tr></table></figure>

<h4 id="示例6-文件-目录数"><a href="#示例6-文件-目录数" class="headerlink" title="示例6(文件&#x2F;目录数)"></a>示例6(文件&#x2F;目录数)</h4><p>计算当前目录下的文件数和目录数</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">ls -l * |grep &quot;^-&quot;|wc -l   ---文件个数  </span><br><span class="line">ls -l * |grep &quot;^d&quot;|wc -l    ---目录个数例六：计算当前目录下的文件数和目录数</span><br></pre></td></tr></table></figure>

<h4 id="示例7-绝对路径"><a href="#示例7-绝对路径" class="headerlink" title="示例7(绝对路径)"></a>示例7(绝对路径)</h4><p>在ls中列出文件的绝对路径</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ls | sed &quot;s:^:`pwd`/:&quot;</span><br></pre></td></tr></table></figure>

<h4 id="示例8-绝对路径包括隐藏文件"><a href="#示例8-绝对路径包括隐藏文件" class="headerlink" title="示例8(绝对路径包括隐藏文件)"></a>示例8(绝对路径包括隐藏文件)</h4><p>列出当前目录下的所有文件(包括隐藏文件)的绝对路径， 对目录不做递归</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">find $PWD -maxdepth 1 | xargs ls -ld</span><br></pre></td></tr></table></figure>

<h4 id="示例9-递归绝对路径包括隐藏文件"><a href="#示例9-递归绝对路径包括隐藏文件" class="headerlink" title="示例9(递归绝对路径包括隐藏文件)"></a>示例9(递归绝对路径包括隐藏文件)</h4><p>递归列出当前目录下的所有文件(包括隐藏文件)的绝对路径</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">find $PWD | xargs ls -ld</span><br></pre></td></tr></table></figure>

<h4 id="示例10"><a href="#示例10" class="headerlink" title="示例10"></a>示例10</h4><p>指定文件时间输出格式</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">ls -tl --time-style=full-iso  # full-iso</span><br><span class="line">ls -ctl --time-style=long-iso # long-iso</span><br></pre></td></tr></table></figure>

<h2 id="mkdir"><a href="#mkdir" class="headerlink" title="mkdir"></a>mkdir</h2><h2 id="cat"><a href="#cat" class="headerlink" title="cat"></a>cat</h2><h2 id="tail"><a href="#tail" class="headerlink" title="tail"></a>tail</h2><blockquote>
<p><strong>tail</strong> 命令从指定点开始将文件写到标准输出。使用 <code>tail</code>命令的 <code>-f</code>选项可以方便的查阅正在改变的日志文件,<code>tail -f filename</code>会把 <code>filename</code>里最尾部的内容显示在屏幕上,并且不但刷新，以便看到最新的文件内容。</p>
</blockquote>
<h3 id="参数-1"><a href="#参数-1" class="headerlink" title="参数"></a>参数</h3><ul>
<li><code>-f</code> 循环读取</li>
<li><code>-q</code> 不显示处理信息</li>
<li><code>-v</code> 显示详细的处理信息</li>
<li><code>-c</code>&lt;数目&gt; 显示的字节数</li>
<li><code>-n</code>&lt;行数&gt; 显示行数</li>
<li><code>--pid=PID</code> 与 <code>-f</code>合用,表示在进程 <code>ID</code>,<code>PID</code>死掉之后结束。</li>
<li><code>-q</code>, <code>--quiet</code>, <code>--silent</code> 从不输出给出文件名的首部。</li>
<li><code>-s</code>, <code>--sleep-interval=S</code> 与 <code>-f</code>合用,表示在每次反复的间隔休眠S秒</li>
</ul>
<h3 id="示例-1"><a href="#示例-1" class="headerlink" title="示例"></a>示例</h3><h4 id="实例1：显示文件末尾内容"><a href="#实例1：显示文件末尾内容" class="headerlink" title="实例1：显示文件末尾内容"></a>实例1：显示文件末尾内容</h4><p>命令：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tail -n 5 log.log</span><br></pre></td></tr></table></figure>

<h4 id="实例2：循环查看文件内容"><a href="#实例2：循环查看文件内容" class="headerlink" title="实例2：循环查看文件内容"></a>实例2：循环查看文件内容</h4><p>命令：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tail -f ping.log</span><br></pre></td></tr></table></figure>

<h4 id="实例3：从第10行开始显示文件"><a href="#实例3：从第10行开始显示文件" class="headerlink" title="实例3：从第10行开始显示文件"></a>实例3：从第10行开始显示文件</h4><p>命令：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tail -n +10 log.log</span><br></pre></td></tr></table></figure>

<h2 id="cp"><a href="#cp" class="headerlink" title="cp"></a>cp</h2><h2 id="rm"><a href="#rm" class="headerlink" title="rm"></a>rm</h2><h2 id="mv"><a href="#mv" class="headerlink" title="mv"></a>mv</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 文件一键改名</span></span><br><span class="line"><span class="keyword">for</span> file <span class="keyword">in</span> *Centos*; <span class="keyword">do</span> <span class="built_in">mv</span> <span class="string">&quot;<span class="variable">$file</span>&quot;</span> <span class="string">&quot;<span class="variable">$&#123;file//Centos/CentOS&#125;</span>&quot;</span>; <span class="keyword">done</span></span><br></pre></td></tr></table></figure>

<h1 id="du"><a href="#du" class="headerlink" title="du"></a>du</h1><p>查看当前文件夹目录大小(包含子目录)</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">du-sh</span><br></pre></td></tr></table></figure>

<h2 id="查看环境变量"><a href="#查看环境变量" class="headerlink" title="查看环境变量"></a>查看环境变量</h2><p>printenv</p>
<p>env</p>
<p>$PATH</p>
<h3 id="设置环境变量"><a href="#设置环境变量" class="headerlink" title="设置环境变量"></a>设置环境变量</h3><h5 id="设置变量的三种方法"><a href="#设置变量的三种方法" class="headerlink" title="设置变量的三种方法"></a>设置变量的三种方法</h5><p>1.在&#x2F;etc&#x2F;profile文件中添加变量【对所有用户生效(永久的)】<br>用VI在文件&#x2F;etc&#x2F;profile文件中增加变量，该变量将会对Linux下所有用户有效，并且是“永久的”。</p>
<p>例如：编辑&#x2F;etc&#x2F;profile文件，添加CLASSPATH变量</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">vi /etc/profile</span><br><span class="line">1</span><br></pre></td></tr></table></figure>

<p>在末尾添加</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib</span><br><span class="line">或</span><br><span class="line">export PATH=&quot;/opt/STM/STLinux-2.3/devkit/sh4/bin:$PATH&quot;</span><br><span class="line">123</span><br></pre></td></tr></table></figure>

<p>注：修改文件后要想马上生效还要运行# source &#x2F;etc&#x2F;profile不然只能在下次重进此用户时生效。<br>注：一般只有root用户才有编辑权限；</p>
<p>2.在用户目录下的.bash_profile文件中增加变量【对单一用户生效(永久的)】<br>用VI在用户目录下的.bash_profile文件中增加变量，改变量仅会对当前用户有效，并且是“永久的”。</p>
<p>例如：编辑guok用户目录(&#x2F;home&#x2F;guok)下的.bash_profile</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">vi /home/guok/.bash.profile</span><br><span class="line">或</span><br><span class="line">v ~/.bash.profile</span><br><span class="line">123</span><br></pre></td></tr></table></figure>

<p>添加如下内容：</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">export CLASSPATH=./JAVAHOME/lib;JAVA_HOME/jre/lib </span><br><span class="line">1</span><br></pre></td></tr></table></figure>

<p>注：修改文件后要想马上生效还要运行$ source &#x2F;home&#x2F;guok&#x2F;.bash_profile不然只能在下次重进此用户时生效。</p>
<p>3 直接运行<a target="_blank" rel="noopener" href="https://so.csdn.net/so/search?q=export%E5%91%BD%E4%BB%A4&spm=1001.2101.3001.7020">export命令</a>定义变量【只对当前shell(BASH)有效(临时的)】<br>在shell的命令行下直接使用[export 变量名&#x3D;变量值] 定义变量，</p>
<p>该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的，</p>
<p>shell关闭了，变量也就失效了，再打开新shell时就没有这个变量，需要使用的话还需要重新定义。</p>
<h5 id="使用unset删除指定的环境变量"><a href="#使用unset删除指定的环境变量" class="headerlink" title="使用unset删除指定的环境变量"></a>使用<a target="_blank" rel="noopener" href="https://so.csdn.net/so/search?q=unset&spm=1001.2101.3001.7020">unset</a>删除指定的环境变量</h5><p>set可以设置某个环境变量的值。清除环境变量的值用unset命令。如果未指定值，则该变量值将被设为NULL。示例如下：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">export TEST=&quot;Test...&quot;			#增加一个环境变量TEST </span><br><span class="line">env|grep TEST					#此命令有输入，证明环境变量TEST已经存在了</span><br><span class="line">TEST=Test... </span><br><span class="line">unset  TEST 					#删除环境变量TES</span><br><span class="line">env|grep TEST					#此命令没有输出，证明环境变量TEST已经删除</span><br></pre></td></tr></table></figure>

<h1 id="文件查找指令"><a href="#文件查找指令" class="headerlink" title="文件查找指令"></a>文件查找指令</h1><h2 id="find"><a href="#find" class="headerlink" title="find"></a>find</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">find / -size +50k -size -60k</span><br></pre></td></tr></table></figure>

<p>（查找根目录下文件大小大于50K小于60K的文件）</p>
<h1 id="传递参数指令"><a href="#传递参数指令" class="headerlink" title="传递参数指令"></a>传递参数指令</h1><h2 id="xargs"><a href="#xargs" class="headerlink" title="xargs"></a>xargs</h2><p><code>xargs</code> 是一个实用的命令行工具，用于将标准输入数据转换为命令行参数，并将其传递给其他命令进行处理。下面是 <code>xargs</code> 的基本使用方法和一些常见选项：</p>
<p>基本语法：</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">bashCopy code</span><br><span class="line">command | xargs [options] [command]</span><br></pre></td></tr></table></figure>

<p>示例：</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">bashCopy code</span><br><span class="line">echo &quot;file1 file2 file3&quot; | xargs rm</span><br></pre></td></tr></table></figure>

<p>上述示例中，<code>echo</code> 命令将文件名列表输出到标准输出，然后通过管道将其传递给 <code>xargs</code> 命令。<code>xargs</code> 命令会将每个文件名作为参数传递给 <code>rm</code> 命令，实现删除这些文件。</p>
<p>常见选项：</p>
<ul>
<li><code>-I &lt;replace-str&gt;</code>：指定替换字符串，用于将输入内容中的每行替换成命令行参数。 示例：<code>echo &quot;file1 file2&quot; | xargs -I &#123;&#125; rm &#123;&#125;</code></li>
<li><code>-t</code>：显示执行的命令行。 示例：<code>echo &quot;file1 file2&quot; | xargs -t rm</code></li>
<li><code>-n &lt;num&gt;</code>：每次传递的参数个数。 示例：<code>echo &quot;file1 file2 file3 file4&quot; | xargs -n 2 rm</code></li>
<li><code>-p</code>：提示用户确认执行命令。 示例：<code>echo &quot;file1 file2&quot; | xargs -p rm</code></li>
<li><code>-d &lt;delimiter&gt;</code>：指定输入内容的分隔符。 示例：<code>echo &quot;file1,file2&quot; | xargs -d &#39;,&#39; rm</code></li>
</ul>
<p>这只是 <code>xargs</code> 命令的一些基本用法和选项示例。您可以根据具体的需求和使用场景，进一步了解和探索更多的 <code>xargs</code> 选项和功能。可以在终端中输入 <code>man xargs</code> 查看完整的 <code>xargs</code> 命令文档。</p>
<h1 id="内存磁盘管理指令"><a href="#内存磁盘管理指令" class="headerlink" title="内存磁盘管理指令"></a>内存磁盘管理指令</h1><h2 id="lsblk"><a href="#lsblk" class="headerlink" title="lsblk"></a>lsblk</h2><blockquote>
<p><strong>lsblk命令</strong> 用于列出所有可用块设备的信息，而且还能显示他们之间的依赖关系，但是它不会列出RAM盘的信息。块设备有硬盘，闪存盘，cd-ROM等等。lsblk命令包含在util-linux-ng包中，现在该包改名为util-linux。这个包带了几个其它工具，如dmesg。要安装lsblk，请在此处下载util-linux包。Fedora用户可以通过命令 <code>sudo yum install util-linux-ng</code>来安装该包。</p>
</blockquote>
<h3 id="选项"><a href="#选项" class="headerlink" title="选项"></a>选项</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">-a, --all            显示所有设备。</span><br><span class="line">-b, --bytes          以bytes方式显示设备大小。</span><br><span class="line">-d, --nodeps         不显示 slaves 或 holders。</span><br><span class="line">-D, --discard        print discard capabilities。</span><br><span class="line">-e, --exclude &lt;list&gt; 排除设备 (default: RAM disks)。</span><br><span class="line">-f, --fs             显示文件系统信息。</span><br><span class="line">-h, --help           显示帮助信息。</span><br><span class="line">-i, --ascii          use ascii characters only。</span><br><span class="line">-m, --perms          显示权限信息。</span><br><span class="line">-l, --list           使用列表格式显示。</span><br><span class="line">-n, --noheadings     不显示标题。</span><br><span class="line">-o, --output &lt;list&gt;  输出列。</span><br><span class="line">-P, --pairs          使用key=&quot;value&quot;格式显示。</span><br><span class="line">-r, --raw            使用原始格式显示。</span><br><span class="line">-t, --topology       显示拓扑结构信息。</span><br></pre></td></tr></table></figure>

<h3 id="实例"><a href="#实例" class="headerlink" title="实例"></a>实例</h3><p>lsblk命令默认情况下将以树状列出所有块设备。打开终端，并输入以下命令：</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">lsblk</span><br><span class="line"></span><br><span class="line">NAME   MAJ:MIN rm   SIZE RO type mountpoint</span><br><span class="line">sda      8:0    0 232.9G  0 disk </span><br><span class="line">├─sda1   8:1    0  46.6G  0 part /</span><br><span class="line">├─sda2   8:2    0     1K  0 part </span><br><span class="line">├─sda5   8:5    0   190M  0 part /boot</span><br><span class="line">├─sda6   8:6    0   3.7G  0 part [SWAP]</span><br><span class="line">├─sda7   8:7    0  93.1G  0 part /data</span><br><span class="line">└─sda8   8:8    0  89.2G  0 part /personal</span><br><span class="line">sr0     11:0    1  1024M  0 rom</span><br></pre></td></tr></table></figure>

<p>7个栏目名称如下：</p>
<ol>
<li><strong>NAME</strong> ：这是块设备名。</li>
<li><strong>MAJ:MIN</strong> ：本栏显示主要和次要设备号。</li>
<li><strong>RM</strong> ：本栏显示设备是否可移动设备。注意，在本例中设备sdb和sr0的RM值等于1，这说明他们是可移动设备。</li>
<li><strong>SIZE</strong> ：本栏列出设备的容量大小信息。例如298.1G表明该设备大小为298.1GB，而1K表明该设备大小为1KB。</li>
<li><strong>RO</strong> ：该项表明设备是否为只读。在本案例中，所有设备的RO值为0，表明他们不是只读的。</li>
<li><strong>TYPE</strong> ：本栏显示块设备是否是磁盘或磁盘上的一个分区。在本例中，sda和sdb是磁盘，而sr0是只读存储（rom）。</li>
<li><strong>MOUNTPOINT</strong> ：本栏指出设备挂载的挂载点。</li>
</ol>
<p>默认选项不会列出所有空设备。要查看这些空设备，请使用以下命令：</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">lsblk -a</span><br></pre></td></tr></table></figure>

<p>lsblk命令也可以用于列出一个特定设备的拥有关系，同时也可以列出组和模式。可以通过以下命令来获取这些信息：</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">lsblk -m</span><br></pre></td></tr></table></figure>

<p>该命令也可以只获取指定设备的信息。这可以通过在提供给lsblk命令的选项后指定设备名来实现。例如，你可能对了解以字节显示你的磁盘驱动器大小比较感兴趣，那么你可以通过运行以下命令来实现：</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">lsblk -b /dev/sda</span><br><span class="line"></span><br><span class="line">等价于</span><br><span class="line"></span><br><span class="line">lsblk --bytes /dev/sda</span><br></pre></td></tr></table></figure>

<p>你也可以组合几个选项来获取指定的输出。例如，你也许想要以列表格式列出设备，而不是默认的树状格式。你可能也对移除不同栏目名称的标题感兴趣。可以将两个不同的选项组合，以获得期望的输出，命令如下：</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">lsblk -nl</span><br></pre></td></tr></table></figure>

<p>要获取SCSI设备的列表，你只能使用-S选项。该选项是大写字母S，不能和-s选项混淆，该选项是用来以颠倒的顺序打印依赖的。</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">lsblk -S</span><br></pre></td></tr></table></figure>

<p>lsblk列出SCSI设备，而-s是逆序选项（将设备和分区的组织关系逆转过来显示），其将给出如下输出。输入命令：</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">lsblk -s</span><br></pre></td></tr></table></figure>

<h2 id="磁盘扩容"><a href="#磁盘扩容" class="headerlink" title="磁盘扩容"></a>磁盘扩容</h2><blockquote>
<p><a target="_blank" rel="noopener" href="https://so.csdn.net/so/search?q=Linux&spm=1001.2101.3001.7020">Linux</a>在使用过程中由于数据量不断增大，导致磁盘空间不足，需要增加磁盘空间，主要有以下三种方式<br>1、直接给 &#x2F; 分区（或者某一分区）扩容，直接在原有磁盘上增大空间<br>2、给虚拟机新增一块磁盘，为这块磁盘新建一个分区<br>3、给虚拟机新增一块磁盘，并把磁盘空间扩容到原有分区</p>
</blockquote>
<h3 id="方式一-给-分区扩容"><a href="#方式一-给-分区扩容" class="headerlink" title="方式一(给 &#x2F; 分区扩容)"></a>方式一(给 &#x2F; 分区扩容)</h3><p>查看磁盘空间大小，目前 &#x2F; 分区大小为50G，并且只有一块磁盘</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">df -h</span><br></pre></td></tr></table></figure>

<img src="/blog/2023/09/07/linux%E5%B8%B8%E7%94%A8/image-20230706095454005.png" class="" title="image-20230706095454005">

<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">fdisk -l</span><br></pre></td></tr></table></figure>

<p>&#x2F;dev&#x2F;sdb 目前为40G，接下来对磁盘进行分区，创建物理卷，把新增的物理卷加到卷组里</p>
<img src="/blog/2023/09/07/linux%E5%B8%B8%E7%94%A8/image-20230706095618239.png" class="" title="image-20230706095618239">

<p>对磁盘分区，使用fdisk &#x2F;dev&#x2F;sbb</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">fdisk /dev/sdb</span><br></pre></td></tr></table></figure>

<p> ，输入n 新建分区，然后一直回车，最后输入 w 保存配置；创建完成之后，可输入 p 查看；&#x2F;dev&#x2F;sdb1 即为新建的分区</p>
<img src="/blog/2023/09/07/linux%E5%B8%B8%E7%94%A8/image-20230706095943285.png" class="" title="image-20230706095943285">

<p>输入partprobe 让系统识别新增的分区，然后创建物理卷，使用pvcreate &#x2F;dev&#x2F;sdb1</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pvcreate /dev/sdb1</span><br></pre></td></tr></table></figure>

<img src="/blog/2023/09/07/linux%E5%B8%B8%E7%94%A8/image-20230706100040380.png" class="" title="image-20230706100040380">

<p>扩展卷组，使用vgextend centos &#x2F;dev&#x2F;sdb1命令，卷组信息可通过 vgdisplay 查看</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vgextend centos /dev/sdb1</span><br></pre></td></tr></table></figure>

<img src="/blog/2023/09/07/linux%E5%B8%B8%E7%94%A8/image-20230706100225631.png" class="" title="image-20230706100225631">

<p>扩展 &#x2F; 的大小，增加40G，使用lvresize -L +40G &#x2F;dev&#x2F;mapper&#x2F;centos-root命令，其中</p>
<img src="/blog/2023/09/07/linux%E5%B8%B8%E7%94%A8/image-20230706100321262.png" class="" title="image-20230706100321262">

<p>重新识别 &#x2F; 分区的大小</p>
<p>ext4格式磁盘: resize2fs &#x2F;dev&#x2F;mapper&#x2F;centos-root</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">resize2fs /dev/mapper/centos-root</span><br></pre></td></tr></table></figure>

<p>xfs格式磁盘: xfs_growfs &#x2F;dev&#x2F;mapper&#x2F;centos-root</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">xfs_growfs /dev/mapper/centos-root</span><br></pre></td></tr></table></figure>

<img src="/blog/2023/09/07/linux%E5%B8%B8%E7%94%A8/image-20230706100410759.png" class="" title="image-20230706100410759">

<h1 id="文件打包上传和下载"><a href="#文件打包上传和下载" class="headerlink" title="文件打包上传和下载"></a>文件打包上传和下载</h1><h2 id="tar"><a href="#tar" class="headerlink" title="tar"></a>tar</h2><p><a target="_blank" rel="noopener" href="https://www.yiibai.com/linux/tar.html">tar命令打包解压示例 - Linux命令大全教程 (yiibai.com)</a></p>
<p>tar zcvf 解压后文件名 要解压的文件或目录</p>
<p>tar zxvf 要解压的文件名</p>
<h2 id="gzip"><a href="#gzip" class="headerlink" title="gzip"></a>gzip</h2><p><a target="_blank" rel="noopener" href="https://www.yiibai.com/linux/gzip.html">gzip命令示例 - Linux命令大全教程 (yiibai.com)</a></p>
<h1 id="其他指令"><a href="#其他指令" class="headerlink" title="其他指令"></a>其他指令</h1><h2 id="wc"><a href="#wc" class="headerlink" title="wc"></a>wc</h2><blockquote>
<p>Linux系统中的<strong>wc</strong>(表示：<strong>Word Count</strong>，不是指厕所)命令的功能为统计指定文件中的字节数、字数、行数，并将统计结果显示输出。</p>
</blockquote>
<h3 id="参数-2"><a href="#参数-2" class="headerlink" title="参数"></a>参数</h3><ul>
<li><code>-c</code> 统计字节数。</li>
<li><code>-l</code> 统计行数。</li>
<li><code>-m</code> 统计字符数。这个标志不能与 -c 标志一起使用。</li>
<li><code>-w</code> 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。</li>
<li><code>-L</code> 打印最长行的长度。</li>
<li><code>-hel</code>p 显示帮助信息</li>
<li><code>--version</code> 显示版本信息</li>
</ul>
<h3 id="示例-2"><a href="#示例-2" class="headerlink" title="示例"></a>示例</h3><h4 id="示例1：查看文件的字节数、字数、行数"><a href="#示例1：查看文件的字节数、字数、行数" class="headerlink" title="示例1：查看文件的字节数、字数、行数"></a>示例1：查看文件的字节数、字数、行数</h4><p>命令：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wc file2.txt</span><br></pre></td></tr></table></figure>

<h4 id="示例2：用wc命令怎么做到只打印统计数字不打印文件名"><a href="#示例2：用wc命令怎么做到只打印统计数字不打印文件名" class="headerlink" title="示例2：用wc命令怎么做到只打印统计数字不打印文件名"></a>示例2：用wc命令怎么做到只打印统计数字不打印文件名</h4><p>命令执行和输出：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">[yiibai@localhost ~]$ wc -l file2.txt</span><br><span class="line">9 file2.txt</span><br><span class="line">[yiibai@localhost ~]$ cat file2.txt |wc -l</span><br><span class="line">9</span><br><span class="line">[yiibai@localhost ~]$</span><br></pre></td></tr></table></figure>

<h4 id="示例3：用来统计当前目录下的文件数"><a href="#示例3：用来统计当前目录下的文件数" class="headerlink" title="示例3：用来统计当前目录下的文件数"></a>示例3：用来统计当前目录下的文件数</h4><p>命令：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ls -l | wc -l</span><br></pre></td></tr></table></figure>

<h2 id="diff"><a href="#diff" class="headerlink" title="diff"></a>diff</h2><blockquote>
<p><strong>diff命令</strong>是 linux上非常重要的工具，用于比较文件的内容，特别是比较两个版本不同的文件以找到改动的地方。<code>diff</code>在命令行中打印每一个行的改动。最新版本的 <code>diff</code>还支持二进制文件。<code>diff</code>程序的输出被称为补丁 (patch)，因为Linux系统中还有一个patch程序，可以根据 <code>diff</code>的输出将 <code>a.c</code>的文件内容更新为 <code>b.c</code>。<code>diff</code>是svn、cvs、git等版本控制工具不可或缺的一部分。</p>
</blockquote>
<h3 id="命令格式"><a href="#命令格式" class="headerlink" title="命令格式"></a>命令格式</h3><p>diff[参数][文件1或目录1][文件2或目录2]</p>
<h3 id="命令功能"><a href="#命令功能" class="headerlink" title="命令功能"></a>命令功能</h3><p><code>diff</code>命令能比较单个文件或者目录内容。如果指定比较的是文件，则只有当输入为文本文件时才有效。以逐行的方式，比较文本文件的异同处。如果指定比较的是目录的的时候，<code>diff</code> 命令会比较两个目录下名字相同的文本文件。列出不同的二进制文件、公共子目录和只在一个目录出现的文件。</p>
<h3 id="参数-3"><a href="#参数-3" class="headerlink" title="参数"></a>参数</h3><ul>
<li><code>-</code> 　指定要显示多少行的文本。此参数必须与-c或-u参数一并使用。</li>
<li><code>-a</code>或 <code>--text</code>  diff预设只会逐行比较文本文件。</li>
<li><code>-b</code>或 <code>--ignore-space-change</code> 　不检查空格字符的不同。</li>
<li><code>-B</code>或 <code>--ignore-blank-lines</code> 　不检查空白行。</li>
<li><code>-c</code> 　显示全部内文，并标出不同之处。</li>
<li><code>-C</code>或 <code>--context</code> 　与执行”-c-“指令相同。</li>
<li><code>-d</code>或 <code>--minimal</code> 　使用不同的演算法，以较小的单位来做比较。</li>
<li><code>-D</code>或 <code>ifdef</code> 　此参数的输出格式可用于前置处理器巨集。</li>
<li><code>-e</code>或 <code>--ed</code> 　此参数的输出格式可用于ed的script文件。</li>
<li><code>-f</code>或 <code>-forward-ed</code> 　输出的格式类似ed的script文件，但按照原来文件的顺序来显示不同处。</li>
<li><code>-H</code>或 <code>--speed-large-files</code> 　比较大文件时，可加快速度。</li>
<li><code>-l</code>或 <code>--ignore-matching-lines</code> 　若两个文件在某几行有所不同，而这几行同时都包含了选项中指定的字符或字符串，则不显示这两个文件的差异。</li>
<li><code>-i</code>或 <code>--ignore-case</code> 　不检查大小写的不同。</li>
<li><code>-l</code>或 <code>--paginate</code> 　将结果交由pr程序来分页。</li>
<li><code>-n</code>或 <code>--rcs</code> 　将比较结果以RCS的格式来显示。</li>
<li><code>-N</code>或 <code>--new-file</code> 　在比较目录时，若文件A仅出现在某个目录中，预设会显示：Only in目录：文件A若使用-N参数，则diff会将文件A与一个空白的文件比较。</li>
<li><code>-p</code> 　若比较的文件为C语言的程序码文件时，显示差异所在的函数名称。</li>
<li><code>-P</code>或 <code>--unidirectional-new-file</code> 　与-N类似，但只有当第二个目录包含了一个第一个目录所没有的文件时，才会将这个文件与空白的文件做比较。</li>
<li><code>-q</code>或 <code>--brief</code> 　仅显示有无差异，不显示详细的信息。</li>
<li><code>-r</code>或 <code>--recursive</code> 　比较子目录中的文件。</li>
<li><code>-s</code>或 <code>--report-identical-files</code> 　若没有发现任何差异，仍然显示信息。</li>
<li><code>-S</code>或 <code>--starting-file</code> 　在比较目录时，从指定的文件开始比较。</li>
<li><code>-t</code>或 <code>--expand-tabs</code> 　在输出时，将tab字符展开。</li>
<li><code>-T</code>或 <code>--initial-tab</code> 　在每行前面加上tab字符以便对齐。</li>
<li><code>-u</code>,<code>-U</code>或 <code>--unified=</code> 　以合并的方式来显示文件内容的不同。</li>
<li><code>-v</code>或 <code>--version</code> 　显示版本信息。</li>
<li><code>-w</code>或 <code>--ignore-all-space</code> 　忽略全部的空格字符。</li>
<li><code>-W</code>或 <code>--width</code> 　在使用-y参数时，指定栏宽。</li>
<li><code>-x</code>或 <code>--exclude</code> 　不比较选项中所指定的文件或目录。</li>
<li><code>-X</code>或 <code>--exclude-from</code> 　您可以将文件或目录类型存成文本文件，然后在&#x3D;中指定此文本文件。</li>
<li><code>-y</code>或 <code>--side-by-side</code> 　以并列的方式显示文件的异同之处。</li>
<li><code>--help</code> 　显示帮助。</li>
<li><code>--left-column</code> 　在使用-y参数时，若两个文件某一行内容相同，则仅在左侧的栏位显示该行内容。</li>
<li><code>--suppress-common-lines</code> 　在使用 <code>-y</code>参数时，仅显示不同之处。</li>
</ul>
<h3 id="示例-3"><a href="#示例-3" class="headerlink" title="示例"></a>示例</h3><h4 id="实例1：比较两个文件"><a href="#实例1：比较两个文件" class="headerlink" title="实例1：比较两个文件"></a>实例1：比较两个文件</h4><p>命令执行和输出：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">[yiibai@localhost ~]$ cat file1.txt</span><br><span class="line">1001 1002 1003</span><br><span class="line">[yiibai@localhost ~]$ cat file2.txt</span><br><span class="line">1001 1002 1003a 1004</span><br><span class="line">[yiibai@localhost ~]$ diff file1.txt file2.txt</span><br><span class="line">3c3,4</span><br><span class="line">&lt; 1003</span><br><span class="line">---</span><br><span class="line"><span class="meta prompt_">&gt; </span><span class="language-bash">1003a</span></span><br><span class="line"><span class="meta prompt_">&gt; </span><span class="language-bash">1004</span></span><br></pre></td></tr></table></figure>

<blockquote>
<p>说明：<br>上面的“<code>3c3,4</code>”表示 <code>file1.txt</code>和 <code>file2.txt</code>文件在3行和第4行内容有所不同；<br><code>diff</code> 的 normal 显示格式有三种提示:</p>
<ul>
<li>a - add</li>
<li>c - change</li>
<li>d - delete</li>
</ul>
</blockquote>
<h4 id="实例2：并排格式输出"><a href="#实例2：并排格式输出" class="headerlink" title="实例2：并排格式输出"></a>实例2：并排格式输出</h4><p>两个文件的每一行对比输出<br>命令：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">diff file1.txt file2.txt  -y -W 50</span><br><span class="line">Shell</span><br></pre></td></tr></table></figure>

<p>输出：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">[yiibai@localhost ~]$ diff file1.txt file2.txt  -y -W 50</span><br><span class="line">1001                    1001</span><br><span class="line">1002                    1002</span><br><span class="line">1003                  | 1003a</span><br><span class="line">                      &gt; 1004</span><br><span class="line">[yiibai@localhost ~]$</span><br><span class="line">Shell</span><br></pre></td></tr></table></figure>

<blockquote>
<p>说明：</p>
<ul>
<li>“<code>|</code>”表示前后 <code>2</code>个文件内容有不同</li>
<li>“<code>&lt;</code>”表示后面文件比前面文件少了 <code>1</code>行内容</li>
<li>“<code>&gt;</code>”表示后面文件比前面文件多了 <code>1</code>行内容</li>
</ul>
</blockquote>
<h4 id="实例3：上下文输出格式"><a href="#实例3：上下文输出格式" class="headerlink" title="实例3：上下文输出格式"></a>实例3：上下文输出格式</h4><p>命令：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">diff file1.txt file2.txt   -c</span><br></pre></td></tr></table></figure>

<h4 id="实例4：统一格式输出"><a href="#实例4：统一格式输出" class="headerlink" title="实例4：统一格式输出"></a>实例4：统一格式输出</h4><p>命令：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">diff file1.txt file2.txt  -u</span><br></pre></td></tr></table></figure>

<blockquote>
<p><strong>说明：</strong><br>它的第一部分，也是文件的基本信息：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">--- file1.txt   2017-02-23 20:34:51.752009952 -0500</span><br><span class="line">+++ file2.txt   2017-02-23 20:35:12.590809278 -0500</span><br><span class="line">Shell</span><br></pre></td></tr></table></figure>

<p>“<code>---&quot;</code>表示变动前的文件，”<code>+++</code>“表示变动后的文件。<br>第二部分，变动的位置用两个@作为起首和结束。<br><code>@@ -1,3 +1,4 @@</code><br>前面的”<code>-1,3</code>“分成三个部分：减号表示第一个文件(即file1.txt)，”<code>1</code>“表示第 <code>1</code>行，”3”表示连续 <code>3</code>行。合在一起，就表示下面是第一个文件从第 <code>1</code>行开始的连续 <code>3</code>行。同样的，”<code>+1,4</code>“表示变动后，成为第二个文件从第 <code>1</code>行开始的连续 <code>4</code>行。</p>
</blockquote>
<h4 id="实例5：比较文件夹不同-比较目录"><a href="#实例5：比较文件夹不同-比较目录" class="headerlink" title="实例5：比较文件夹不同(比较目录)"></a>实例5：比较文件夹不同(比较目录)</h4><p>命令：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">diff  test4 test5</span><br></pre></td></tr></table></figure>

<h4 id="实例6：比较两个文件不同，并生产补丁"><a href="#实例6：比较两个文件不同，并生产补丁" class="headerlink" title="实例6：比较两个文件不同，并生产补丁"></a>实例6：比较两个文件不同，并生产补丁</h4><p>命令：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">diff -ruN file1.txt file2.txt &gt; patch.txt</span><br></pre></td></tr></table></figure>

<h4 id="实例7：打补丁"><a href="#实例7：打补丁" class="headerlink" title="实例7：打补丁"></a>实例7：打补丁</h4><p>现在，要使用 <code>file1.txt</code> 文件的内容与 <code>file2.txt</code> 文件的内容一样，命令执行和输出：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line">[yiibai@localhost ~]$ cat file1.txt</span><br><span class="line">1001</span><br><span class="line">1002</span><br><span class="line">1003</span><br><span class="line">[yiibai@localhost ~]$ cat file2.txt</span><br><span class="line">1001</span><br><span class="line">1002</span><br><span class="line">1003a</span><br><span class="line">1004</span><br><span class="line">[yiibai@localhost ~]$ diff -ruN file1.txt file2.txt &gt; patch.txt</span><br><span class="line">[yiibai@localhost ~]$ patch file1.txt patch.txt</span><br><span class="line">patching file file1.txt</span><br><span class="line">[yiibai@localhost ~]$ cat file1.txt</span><br><span class="line">1001</span><br><span class="line">1002</span><br><span class="line">1003a</span><br><span class="line">1004</span><br><span class="line">[yiibai@localhost ~]$ cat file2.txt</span><br><span class="line">1001</span><br><span class="line">1002</span><br><span class="line">1003a</span><br><span class="line">1004</span><br><span class="line">[yiibai@localhost ~]$</span><br><span class="line">Shell</span><br></pre></td></tr></table></figure>

<blockquote>
<p>现在可以看到 <code>file1.txt</code> 与 <code>file2.txt</code> 文件的内容一样了。</p>
</blockquote>
<h2 id="cut"><a href="#cut" class="headerlink" title="cut"></a>cut</h2><blockquote>
<p>Linux cut命令用于显示每行从开头算起 num1 到 num2 的文字</p>
<p>提示:</p>
<p>在linux所有的文件结尾都有一个$</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">cat -En lists.txt</span><br></pre></td></tr></table></figure>

<img src="/blog/2023/09/07/linux%E5%B8%B8%E7%94%A8/image-20230620154332730.png" class="" title="image-20230620154332730">
</blockquote>
<h3 id="语法"><a href="#语法" class="headerlink" title="语法"></a>语法</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">cut  [-bn] [file]</span><br><span class="line">cut [-c] [file]</span><br><span class="line">cut [-df] [file]</span><br></pre></td></tr></table></figure>

<p><strong>使用说明:</strong></p>
<p>cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。</p>
<p>如果不指定 File 参数，cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。</p>
<h3 id="参数-4"><a href="#参数-4" class="headerlink" title="参数:"></a><strong>参数:</strong></h3><ul>
<li>-b ：以字节为单位进行分割。这些字节位置将忽略多字节字符边界，除非也指定了 -n 标志。</li>
<li>-c ：以字符为单位进行分割。</li>
<li>-d ：自定义分隔符，默认为制表符。</li>
<li>-f ：与-d一起使用，指定显示哪个区域。</li>
<li>-n ：取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的<br>范围之内，该字符将被写出；否则，该字符将被排除</li>
</ul>
<h3 id="示例-4"><a href="#示例-4" class="headerlink" title="示例"></a>示例</h3><h4 id="实例1"><a href="#实例1" class="headerlink" title="实例1"></a>实例1</h4><p>将所有的文件名写到指定文件下</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">find ./file1 -name &quot;*.*&quot; &gt; lists.txt</span><br></pre></td></tr></table></figure>

<p>-d定义分隔符,-f指定截取的区域</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">grep &quot;[^/].txt$&quot; lists.txt -o &gt; a.txt</span><br></pre></td></tr></table></figure>

<p>或</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">cat lists.txt | cut -d / -f 3 &gt;&gt; a.txt</span><br></pre></td></tr></table></figure>

<p>对比两个文件间的差异</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">diff a.txt b.txt</span><br></pre></td></tr></table></figure>

<h1 id="文本处理指令"><a href="#文本处理指令" class="headerlink" title="文本处理指令"></a>文本处理指令</h1><h2 id="grep"><a href="#grep" class="headerlink" title="grep"></a>grep</h2><blockquote>
<p>每行匹配一次</p>
</blockquote>
<p>Linux系统中 <code>grep</code>命令是一种强大的文本搜索工具，它能使用正则表达式搜索文本，并把匹 配的行打印出来。<code>grep</code>全称是<strong>Global Regular Expression Print</strong>，表示全局正则表达式版本，它的使用权限是所有用户。</p>
<p><code>grep</code>的工作方式是这样的，它在一个或多个文件中搜索字符串模板。如果模板包括空格，则必须被引用，模板后的所有字符串被看作文件名。搜索的结果被送到标准输出，不影响原文件内容。<br><code>grep</code>可用于shell脚本，因为 <code>grep</code>通过返回一个状态值来说明搜索的状态，如果模板搜索成功，则返回 <code>0</code>，如果搜索不成功，则返回 <code>1</code>，如果搜索的文件不存在，则返回 <code>2</code>。我们利用这些返回值就可进行一些自动化的文本处理工作。</p>
<h3 id="1．命令格式"><a href="#1．命令格式" class="headerlink" title="1．命令格式"></a>1．命令格式</h3><p>grep [option] pattern file</p>
<h3 id="2．命令功能"><a href="#2．命令功能" class="headerlink" title="2．命令功能"></a>2．命令功能</h3><p>用于过滤&#x2F;搜索的特定字符。可使用正则表达式能多种命令配合使用，使用上十分灵活。</p>
<h3 id="3．命令参数"><a href="#3．命令参数" class="headerlink" title="3．命令参数"></a>3．命令参数</h3><ul>
<li><p><code>-a</code>   —text   #不要忽略二进制的数据。</p>
</li>
<li><p><code>-A</code>&lt;显示行数&gt;   —after-context&#x3D;&lt;显示行数&gt;   #除了显示符合范本样式的那一列之外，并显示该行之后的内容。</p>
</li>
<li><p><code>-b</code>   —byte-offset   #在显示符合样式的那一行之前，标示出该行第一个字符的编号。</p>
</li>
<li><p><code>-B</code>&lt;显示行数&gt;   —before-context&#x3D;&lt;显示行数&gt;   #除了显示符合样式的那一行之外，并显示该行之前的内容。</p>
</li>
<li><p><code>-c</code>    —count   #计算符合样式的列数。</p>
</li>
<li><p><code>-C</code>&lt;显示行数&gt;    —context&#x3D;&lt;显示行数&gt;或-&lt;显示行数&gt;   #除了显示符合样式的那一行之外，并显示该行之前后的内容。</p>
</li>
<li><p><code>-d</code> &lt;动作&gt;      —directories&#x3D;&lt;动作&gt;   #当指定要查找的是目录而非文件时，必须使用这项参数，否则grep指令将回报信息并停止动作。</p>
</li>
<li><p><code>-e</code>&lt;范本样式&gt;  —regexp&#x3D;&lt;范本样式&gt;   #指定字符串做为查找文件内容的样式。</p>
</li>
<li><p><code>-E</code>      —extended-regexp   #将样式为延伸的普通表示法来使用。</p>
<blockquote>
<p>扩展正则: grep -e <code>正则表达式</code></p>
<p><code>+</code> 表示前边的字符出现一次或者一次以上</p>
<p><code>?</code> 表示前边的字符出现0次或一次以上</p>
<p><code>()</code> 将一个或多个字符捆绑在一起,当作一个整体进行处理</p>
<ul>
<li>小括号功能之一是分组过滤被括起来的内容,括号内的内容表示一个整体</li>
<li>括号()内的内容可以被后面的”\n”正则引用,n为数字,表示引用第几个括号的内容<ul>
<li><code>\1</code>  :  表示从左侧起,第一个括号中的模式所匹配到的字符</li>
<li><code>\2</code>  :  从左侧起,第二个括号中的模式所匹配到的字符</li>
</ul>
</li>
</ul>
</blockquote>
</li>
<li><p><code>-f</code>&lt;规则文件&gt;  —file&#x3D;&lt;规则文件&gt;   #指定规则文件，其内容含有一个或多个规则样式，让grep查找符合规则条件的文件内容，格式为每行一个规则样式。</p>
</li>
<li><p><code>-F</code>   —fixed-regexp   #将样式视为固定字符串的列表。</p>
</li>
<li><p><code>-G</code>   —basic-regexp   #将样式视为普通的表示法来使用。</p>
</li>
<li><p><code>-h</code>   —no-filename   #在显示符合样式的那一行之前，不标示该行所属的文件名称。</p>
</li>
<li><p><code>-H</code>   —with-filename   #在显示符合样式的那一行之前，表示该行所属的文件名称。</p>
</li>
<li><p><code>-i</code>   —ignore-case   #忽略字符大小写的差别。</p>
</li>
<li><p><code>-l</code>    —file-with-matches   #列出文件内容符合指定的样式的文件名称。</p>
</li>
<li><p><code>-L</code>   —files-without-match   #列出文件内容不符合指定的样式的文件名称。</p>
</li>
<li><p><code>-n</code>   —line-number   #在显示符合样式的那一行之前，标示出该行的列数编号。</p>
</li>
<li><p><code>-q</code>  —quiet或—silent   #不显示任何信息。</p>
</li>
<li><p><code>-r</code>   —recursive   #此参数的效果和指定“-d recurse”参数相同。</p>
</li>
<li><p><code>-s</code>   —no-messages   #不显示错误信息。</p>
</li>
<li><p><code>-v</code>   —revert-match   #显示不包含匹配文本的所有行。</p>
</li>
<li><p><code>-V</code>   —version   #显示版本信息。</p>
</li>
<li><p><code>-w</code>   —word-regexp   #只显示全字符合的列。</p>
</li>
<li><p><code>-x</code>    —line-regexp   #只显示全列符合的列。</p>
</li>
<li><p><code>-y</code>   #此参数的效果和指定“-i”参数相同。</p>
</li>
<li><p><code>-o</code>   忽略除了匹配字段之外的内容</p>
</li>
</ul>
<h3 id="4．规则表达式"><a href="#4．规则表达式" class="headerlink" title="4．规则表达式"></a>4．规则表达式</h3><blockquote>
<p>匹配空行 <code>^$</code></p>
</blockquote>
<p><code>grep</code>的规则表达式:</p>
<ul>
<li><code>^</code>  #锚定行的开始 如：’^grep’匹配所有以grep开头的行。</li>
<li><code>$</code>  #锚定行的结束 如：’grep$’匹配所有以grep结尾的行。</li>
<li><code>.</code>  #匹配一个非换行符的字符(不包括空行) 如：’gr.p’匹配gr后接一个任意字符，然后是p。</li>
<li><code>*</code>  #匹配零个或多个先前字符 如：’*grep’匹配所有一个或多个空格后紧跟grep的行。</li>
<li><code>.*</code>   #一起用代表任意字符。</li>
<li><code>[]</code>   #匹配一个指定范围内的字符，如’[Gg]rep’匹配Grep和grep。</li>
<li><code>[^]</code>  #匹配一个不在指定范围内的字符，如：’[^A-FH-Z]rep’匹配不包含A-R和T-Z的一个字母开头，紧跟rep的行。</li>
<li><code>\(..\)</code>  #标记匹配字符，如’(love)‘，love被标记为1。</li>
<li><code>\&lt;</code>      #锚定单词的开始，如:’&lt;grep’匹配包含以grep开头的单词的行。</li>
<li><code>\&gt;</code>      #锚定单词的结束，如’grep&gt;‘匹配包含以grep结尾的单词的行。</li>
<li><code>x\&#123;m\&#125;</code>  #重复字符x，m次，如：’0{5}‘匹配包含5个o的行。</li>
<li><code>x\&#123;m,\&#125;</code>  #重复字符x,至少m次，如：’o{5,}‘匹配至少有5个o的行。</li>
<li><code>x\&#123;m,n\&#125;</code>  #重复字符x，至少m次，不多于n次，如：’o{5,10}‘匹配5—10个o的行。</li>
<li><code>\w</code>    #匹配文字和数字字符，也就是[A-Za-z0-9]，如：’G\w*p’匹配以G后跟零个或多个文字或数字字符，然后是p。</li>
<li><code>\W</code>    #\w的反置形式，匹配一个或多个非单词字符，如点号句号等。</li>
<li><code>\b</code>    #单词锁定符，如: ‘\bgrep\b’只匹配 <code>grep</code>。</li>
</ul>
<p><strong>POSIX字符:</strong><br>为了在不同国家的字符编码中保持一至，POSIX(The Portable Operating System Interface)增加了特殊的字符类，如[:alnum:]是[A-Za-z0-9]的另一个写法。要把它们放到[]号内才能成为正则表达式，如[A- Za-z0-9]或[[:alnum:]]。在linux下的grep除fgrep外，都支持POSIX的字符类。</p>
<ul>
<li><code>[:alnum:]</code>    #文字数字字符</li>
<li><code>[:alpha:]</code>    #文字字符</li>
<li><code>[:digit:]</code>    #数字字符</li>
<li><code>[:graph:]</code>    #非空字符(非空格、控制字符)</li>
<li><code>[:lower:]</code>    #小写字符</li>
<li><code>[:cntrl:]</code>    #控制字符</li>
<li><code>[:print:]</code>    #非空字符(包括空格)</li>
<li><code>[:punct:]</code>    #标点符号</li>
<li><code>[:space:]</code>    #所有空白字符(新行，空格，制表符)</li>
<li><code>[:upper:]</code>    #大写字符</li>
<li><code>[:xdigit:]</code>   #十六进制数字(0-9，a-f，A-F)</li>
</ul>
<h3 id="5．使用实例"><a href="#5．使用实例" class="headerlink" title="5．使用实例"></a>5．使用实例</h3><h4 id="实例1：查找指定进程"><a href="#实例1：查找指定进程" class="headerlink" title="实例1：查找指定进程"></a>实例1：查找指定进程</h4><p>命令：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">ps -ef|grep python</span><br><span class="line">Shell</span><br></pre></td></tr></table></figure>

<p>输出：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">[yiibai@localhost yiibai]$ ps -ef|grep python</span><br><span class="line">root        920      1  0 Feb25 ?        00:00:14 /usr/bin/python -Es /usr/sbin/tuned -l -P</span><br><span class="line">root       4705   4631 91 08:05 pts/0    00:00:36 python run.py</span><br><span class="line">yiibai     4726   4712  0 08:05 pts/0    00:00:00 grep --color=auto python</span><br><span class="line">[yiibai@localhost yiibai]$</span><br><span class="line">Shell</span><br></pre></td></tr></table></figure>

<p><strong>说明：</strong>第一条记录是查找出的进程；第二条结果是 <code>grep</code>进程本身，并非真正要找的进程。</p>
<h4 id="实例2：查找指定进程个数"><a href="#实例2：查找指定进程个数" class="headerlink" title="实例2：查找指定进程个数"></a>实例2：查找指定进程个数</h4><p>命令：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">ps -ef|grep python -c</span><br><span class="line">ps -ef|grep -c python</span><br><span class="line">Shell</span><br></pre></td></tr></table></figure>

<p>输出：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost yiibai]# ps -ef|grep python -c</span><br><span class="line">3</span><br><span class="line">[root@localhost yiibai]# ps -ef|grep -c python</span><br><span class="line">3</span><br><span class="line">[root@localhost yiibai]#</span><br><span class="line">Shell</span><br></pre></td></tr></table></figure>

<h4 id="实例3：从文件中读取关键词进行搜索"><a href="#实例3：从文件中读取关键词进行搜索" class="headerlink" title="实例3：从文件中读取关键词进行搜索"></a>实例3：从文件中读取关键词进行搜索</h4><p>命令：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">cat file2.txt |grep -f file1.txt</span><br><span class="line">Shell</span><br></pre></td></tr></table></figure>

<p>输出：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line">[yiibai@localhost ~]$ cat file1.txt</span><br><span class="line">java</span><br><span class="line">python</span><br><span class="line">linux</span><br><span class="line">[yiibai@localhost ~]$ cat file2.txt</span><br><span class="line">windows 10</span><br><span class="line">windows 7</span><br><span class="line">linux</span><br><span class="line"><span class="meta prompt_">C#</span><span class="language-bash"></span></span><br><span class="line"><span class="language-bash">java</span></span><br><span class="line">PHP</span><br><span class="line">python</span><br><span class="line">1003</span><br><span class="line">Hello Word.</span><br><span class="line">[yiibai@localhost ~]$ cat file2 |grep -f file1.txt</span><br><span class="line">cat: file2: No such file or directory</span><br><span class="line">[yiibai@localhost ~]$ cat file2.txt |grep -f file1.txt</span><br><span class="line">linux</span><br><span class="line">java</span><br><span class="line">python</span><br><span class="line">[yiibai@localhost ~]$</span><br><span class="line">Shell</span><br></pre></td></tr></table></figure>

<p><strong>说明：</strong>输出 <code>file2.txt</code>文件中含有从 <code>file1.txt</code>文件中读取出的关键词的内容行。</p>
<h4 id="实例4：从文件中读取关键词进行搜索-且显示行号"><a href="#实例4：从文件中读取关键词进行搜索-且显示行号" class="headerlink" title="实例4：从文件中读取关键词进行搜索 且显示行号"></a>实例4：从文件中读取关键词进行搜索 且显示行号</h4><p>命令：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">cat file2.txt | grep -nf file1.txt</span><br><span class="line">Shell</span><br></pre></td></tr></table></figure>

<p>输出：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">[yiibai@localhost ~]$ cat file2.txt | grep -nf file1.txt</span><br><span class="line">3:linux</span><br><span class="line">5:java</span><br><span class="line">7:python</span><br><span class="line">[yiibai@localhost ~]$</span><br><span class="line">Shell</span><br></pre></td></tr></table></figure>

<p>说明：输出 <code>file2.txt</code> 文件中含有从 <code>file1.txt</code> 文件中读取出的关键词的内容行，并显示每一行的行号。</p>
<h4 id="实例5：从文件中查找关键词"><a href="#实例5：从文件中查找关键词" class="headerlink" title="实例5：从文件中查找关键词"></a>实例5：从文件中查找关键词</h4><p>命令：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">grep &#x27;linux&#x27; file1.txt</span><br><span class="line">Shell</span><br></pre></td></tr></table></figure>

<p>输出：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">[yiibai@localhost ~]$ grep &#x27;linux&#x27; file1.txt</span><br><span class="line">linux</span><br><span class="line">[yiibai@localhost ~]$ grep &#x27;java&#x27; file1.txt</span><br><span class="line">java</span><br><span class="line">[yiibai@localhost ~]$ grep &#x27;ruby&#x27; file1.txt</span><br><span class="line">[yiibai@localhost ~]$</span><br><span class="line">Shell</span><br></pre></td></tr></table></figure>

<h4 id="实例6：从多个文件中查找关键词"><a href="#实例6：从多个文件中查找关键词" class="headerlink" title="实例6：从多个文件中查找关键词"></a>实例6：从多个文件中查找关键词</h4><p>命令：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">grep &#x27;linux&#x27; file1.txt file2.txt</span><br><span class="line">Shell</span><br></pre></td></tr></table></figure>

<p>输出：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">[yiibai@localhost ~]$ grep &#x27;linux&#x27; file1.txt file2.txt</span><br><span class="line">file1.txt:linux</span><br><span class="line">file2.txt:linux</span><br><span class="line">[yiibai@localhost ~]$</span><br><span class="line">Shell</span><br></pre></td></tr></table></figure>

<p>说明：多文件时，输出查询到的信息内容行时，会把文件的命名在行最前面输出并且加上”:”作为标示符。</p>
<h4 id="实例7：grep不显示本身进程"><a href="#实例7：grep不显示本身进程" class="headerlink" title="实例7：grep不显示本身进程"></a>实例7：grep不显示本身进程</h4><p>命令：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">ps aux|grep \[s]sh</span><br><span class="line">ps aux | grep ssh | grep -v &quot;grep&quot;</span><br><span class="line">Shell</span><br></pre></td></tr></table></figure>

<p>输出：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">[yiibai@localhost ~]$ ps aux|grep \[s]sh</span><br><span class="line">root       1219  0.0  0.1  82468  1332 ?        Ss   Feb25   0:00 /usr/sbin/sshd</span><br><span class="line">root       4409  0.0  0.4 145700  4064 ?        Ss   07:28   0:00 sshd: yiibai [priv]</span><br><span class="line">yiibai     4411  0.0  0.2 145700  2068 ?        S    07:29   0:05 sshd: yiibai@pts/0</span><br><span class="line">[yiibai@localhost ~]$ ps aux | grep ssh | grep -v &quot;grep&quot;</span><br><span class="line">root       1219  0.0  0.1  82468  1332 ?        Ss   Feb25   0:00 /usr/sbin/sshd</span><br><span class="line">root       4409  0.0  0.4 145700  4064 ?        Ss   07:28   0:00 sshd: yiibai [priv]</span><br><span class="line">yiibai     4411  0.0  0.2 145700  2068 ?        S    07:29   0:05 sshd: yiibai@pts/0</span><br><span class="line">[yiibai@localhost ~]$</span><br><span class="line">Shell</span><br></pre></td></tr></table></figure>

<h4 id="实例8：找出已w开头的行内容"><a href="#实例8：找出已w开头的行内容" class="headerlink" title="实例8：找出已w开头的行内容"></a>实例8：找出已w开头的行内容</h4><p>命令：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">cat file1.txt |grep ^w</span><br><span class="line">Shell</span><br></pre></td></tr></table></figure>

<p>输出：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">[yiibai@localhost ~]$ cat file2.txt</span><br><span class="line">windows 10</span><br><span class="line">windows 7</span><br><span class="line">linux</span><br><span class="line"><span class="meta prompt_">C#</span><span class="language-bash"></span></span><br><span class="line"><span class="language-bash">java</span></span><br><span class="line">PHP</span><br><span class="line">python</span><br><span class="line">1003</span><br><span class="line">Hello Word.</span><br><span class="line">[yiibai@localhost ~]$ cat file2.txt | grep ^w</span><br><span class="line">windows 10</span><br><span class="line">windows 7</span><br><span class="line">[yiibai@localhost ~]$ cat file2.txt | grep ^p</span><br><span class="line">python</span><br><span class="line">[yiibai@localhost ~]$</span><br><span class="line">Shell</span><br></pre></td></tr></table></figure>

<h4 id="实例9：输出非w开头的行内容"><a href="#实例9：输出非w开头的行内容" class="headerlink" title="实例9：输出非w开头的行内容"></a>实例9：输出非w开头的行内容</h4><p>命令：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">cat file2.txt |grep ^[^w]</span><br><span class="line">Shell</span><br></pre></td></tr></table></figure>

<p>输出：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line">[yiibai@localhost ~]$ cat file2.txt</span><br><span class="line">windows 10</span><br><span class="line">windows 7</span><br><span class="line">linux</span><br><span class="line"><span class="meta prompt_">C#</span><span class="language-bash"></span></span><br><span class="line"><span class="language-bash">java</span></span><br><span class="line">PHP</span><br><span class="line">python</span><br><span class="line">1003</span><br><span class="line">Hello Word.</span><br><span class="line">[yiibai@localhost ~]$ cat file2.txt |grep ^[^w]</span><br><span class="line">linux</span><br><span class="line"><span class="meta prompt_">C#</span><span class="language-bash"></span></span><br><span class="line"><span class="language-bash">java</span></span><br><span class="line">PHP</span><br><span class="line">python</span><br><span class="line">1003</span><br><span class="line">Hello Word.</span><br><span class="line">[yiibai@localhost ~]$</span><br><span class="line">Shell</span><br></pre></td></tr></table></figure>

<h4 id="实例10：输出以hat结尾的行内容"><a href="#实例10：输出以hat结尾的行内容" class="headerlink" title="实例10：输出以hat结尾的行内容"></a>实例10：输出以hat结尾的行内容</h4><p>命令：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">cat test.txt |grep hat$</span><br><span class="line">Shell</span><br></pre></td></tr></table></figure>

<p>输出：</p>
<h4 id="实例11：显示包含on或者on字符的内容行"><a href="#实例11：显示包含on或者on字符的内容行" class="headerlink" title="实例11：显示包含on或者on字符的内容行"></a>实例11：显示包含on或者on字符的内容行</h4><p>命令：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">cat file2.txt |grep -E &quot;on|va&quot;</span><br><span class="line">Shell</span><br></pre></td></tr></table></figure>

<p>输出：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">[yiibai@localhost ~]$ cat file2.txt</span><br><span class="line">windows 10</span><br><span class="line">windows 7</span><br><span class="line">linux</span><br><span class="line"><span class="meta prompt_">C#</span><span class="language-bash"></span></span><br><span class="line"><span class="language-bash">java</span></span><br><span class="line">PHP</span><br><span class="line">python</span><br><span class="line">1003</span><br><span class="line">Hello Word.</span><br><span class="line">[yiibai@localhost ~]$</span><br><span class="line">[yiibai@localhost ~]$</span><br><span class="line">[yiibai@localhost ~]$ cat file2.txt |grep -E &quot;on|va&quot;</span><br><span class="line">java</span><br><span class="line">python</span><br><span class="line">[yiibai@localhost ~]$</span><br><span class="line">Shell</span><br></pre></td></tr></table></figure>

<h4 id="实例12：显示当前目录下面以-txt-结尾的文件中的所有包含每个字符串至少有7个连续小写字符的字符串的行"><a href="#实例12：显示当前目录下面以-txt-结尾的文件中的所有包含每个字符串至少有7个连续小写字符的字符串的行" class="headerlink" title="实例12：显示当前目录下面以.txt 结尾的文件中的所有包含每个字符串至少有7个连续小写字符的字符串的行"></a>实例12：显示当前目录下面以.txt 结尾的文件中的所有包含每个字符串至少有7个连续小写字符的字符串的行</h4><p>命令：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">grep &#x27;[a-z]\&#123;7\&#125;&#x27; *.txt</span><br><span class="line">Shell</span><br></pre></td></tr></table></figure>

<p>输出：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">[yiibai@localhost ~]$ grep &#x27;[a-z]\&#123;7\&#125;&#x27; *.txt</span><br><span class="line">file2.txt:windows 10</span><br><span class="line">file2.txt:windows 7</span><br><span class="line">[yiibai@localhost ~]$</span><br></pre></td></tr></table></figure>

<h2 id="awk"><a href="#awk" class="headerlink" title="awk"></a>awk</h2><blockquote>
<p><code>awk</code> 是一种强大的文本处理工具，用于在命令行环境下对结构化文本数据进行处理和分析。它逐行扫描输入文件，并根据用户指定的规则进行操作。<code>awk</code> 可以根据字段、模式匹配、条件语句等对文本进行提取、转换、计算和格式化。</p>
<p>下面是 <code>awk</code> 的一些特点和功能：</p>
<ol>
<li>字段处理：<code>awk</code> 默认将每一行按照空格或制表符进行字段分割，可以使用 <code>$1</code>、<code>$2</code> 等表示第一个、第二个字段，以此类推。可以对字段进行操作、提取、计算等。</li>
<li>模式匹配：<code>awk</code> 可以根据指定的模式匹配行，只处理符合模式的行。模式可以是简单的字符串、正则表达式或复杂的逻辑表达式。</li>
<li>条件语句：<code>awk</code> 支持使用条件语句对数据进行过滤和处理。可以使用 <code>if-else</code>、<code>while</code>、<code>for</code> 等控制结构进行流程控制。</li>
<li>内置变量：<code>awk</code> 提供了一些内置变量，用于访问和处理数据。例如，<code>NR</code> 表示当前行号，<code>NF</code> 表示当前行的字段数，<code>$0</code> 表示整行内容，等等。</li>
<li>函数和算术运算：<code>awk</code> 支持使用内置函数和算术运算对数据进行计算和处理。可以使用数学函数、字符串函数、日期函数等。</li>
<li>输出格式控制：<code>awk</code> 允许用户自定义输出的格式。可以使用 <code>printf</code> 函数按照指定格式输出数据。</li>
<li>文件处理：<code>awk</code> 可以处理多个输入文件，并支持对文件进行读取、写入和追加操作。</li>
<li>脚本支持：<code>awk</code> 支持将多个命令和规则写入脚本文件，以便批量处理数据。</li>
</ol>
</blockquote>
<h3 id="语法-1"><a href="#语法-1" class="headerlink" title="语法"></a>语法</h3><p><code>awk</code> 是一种强大的文本处理工具，它使用一种类似于编程语言的语法来操作和处理结构化文本数据。以下是 <code>awk</code> 的基本语法要点：</p>
<h4 id="基本结构："><a href="#基本结构：" class="headerlink" title="基本结构："></a>基本结构：</h4><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">arduinoCopy code</span><br><span class="line">awk &#x27;pattern &#123; action &#125;&#x27; file</span><br></pre></td></tr></table></figure>

<p><code>pattern</code> 是用于匹配行的模式，<code>action</code> 是在匹配的行上执行的操作。<code>file</code> 是要处理的输入文件。</p>
<h4 id="默认操作："><a href="#默认操作：" class="headerlink" title="默认操作："></a>默认操作：</h4><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">arduinoCopy code</span><br><span class="line">awk &#x27;&#123; print &#125;&#x27; file</span><br></pre></td></tr></table></figure>

<p>如果未提供模式和操作，则默认执行 <code>&#123; print &#125;</code>，即打印每行。</p>
<h4 id="字段和字段分隔符："><a href="#字段和字段分隔符：" class="headerlink" title="字段和字段分隔符："></a>字段和字段分隔符：</h4><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">arduinoCopy code</span><br><span class="line">awk &#x27;&#123; print $1 &#125;&#x27; file</span><br></pre></td></tr></table></figure>

<p><code>$1</code> 表示第一个字段，<code>$2</code> 表示第二个字段，以此类推。默认字段分隔符是空格或制表符，可以使用 <code>-F</code> 参数指定其他分隔符，如 <code>-F&#39;,&#39;</code>。</p>
<h4 id="内置变量："><a href="#内置变量：" class="headerlink" title="内置变量："></a>内置变量：</h4><ul>
<li><code>NR</code>：当前行号。</li>
<li><code>NF</code>：当前行的字段数。(字段1 字段2 字段3 )</li>
<li><code>$0</code>：整行内容。</li>
</ul>
<h4 id="条件语句："><a href="#条件语句：" class="headerlink" title="条件语句："></a>条件语句：</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">arduinoCopy code</span><br><span class="line">awk &#x27;&#123; if (condition) &#123; action1 &#125; else &#123; action2 &#125; &#125;&#x27; file</span><br></pre></td></tr></table></figure>

<p>使用 <code>if-else</code> 结构执行条件判断，并根据结果执行相应的操作。</p>
<h4 id="循环："><a href="#循环：" class="headerlink" title="循环："></a>循环：</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">cssCopy code</span><br><span class="line">awk &#x27;&#123; for (i = 1; i &lt;= 5; i++) &#123; print i &#125; &#125;&#x27; file</span><br></pre></td></tr></table></figure>

<p>使用 <code>for</code> 循环结构执行迭代操作。</p>
<h4 id="内置函数："><a href="#内置函数：" class="headerlink" title="内置函数："></a>内置函数：</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">wasmCopy code</span><br><span class="line">awk &#x27;&#123; result = function($1); print result &#125;&#x27; file</span><br></pre></td></tr></table></figure>

<p><code>function</code> 表示内置函数，可以使用内置函数对数据进行处理和计算。</p>
<h4 id="输出格式控制："><a href="#输出格式控制：" class="headerlink" title="输出格式控制："></a>输出格式控制：</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">swiftCopy code</span><br><span class="line">awk &#x27;&#123; printf &quot;%-10s %s\n&quot;, $1, $2 &#125;&#x27; file</span><br></pre></td></tr></table></figure>

<p>使用 <code>printf</code> 函数按照指定格式输出数据。</p>
<h4 id="BEGIN-和-END-块："><a href="#BEGIN-和-END-块：" class="headerlink" title="BEGIN 和 END 块："></a>BEGIN 和 END 块：</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">arduinoCopy code</span><br><span class="line">awk &#x27;BEGIN &#123; initialization &#125; pattern &#123; action &#125; END &#123; finalization &#125;&#x27; file</span><br></pre></td></tr></table></figure>

<p><code>BEGIN</code> 块在处理之前执行一次，<code>END</code> 块在处理完所有行后执行一次。可以在这些块中进行初始化和最终处理操作。</p>
<h3 id="使用示例"><a href="#使用示例" class="headerlink" title="使用示例"></a>使用示例</h3><h4 id="打印文件内容："><a href="#打印文件内容：" class="headerlink" title="打印文件内容："></a>打印文件内容：</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">arduinoCopy code</span><br><span class="line">awk &#x27;&#123; print &#125;&#x27; file.txt</span><br></pre></td></tr></table></figure>

<p>这将打印文件的所有行。</p>
<h4 id="打印特定字段："><a href="#打印特定字段：" class="headerlink" title="打印特定字段："></a>打印特定字段：</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">swiftCopy code</span><br><span class="line">awk &#x27;&#123; print $1, $2 &#125;&#x27; file.txt</span><br></pre></td></tr></table></figure>

<p>这将打印每行的第一个和第二个字段。</p>
<h4 id="使用条件语句："><a href="#使用条件语句：" class="headerlink" title="使用条件语句："></a>使用条件语句：</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">swiftCopy code</span><br><span class="line">awk &#x27;&#123; if ($1 &gt; 10) print $0 &#125;&#x27; file.txt</span><br></pre></td></tr></table></figure>

<p>这将打印文件中第一个字段大于10的行。</p>
<h4 id="自定义分隔符："><a href="#自定义分隔符：" class="headerlink" title="自定义分隔符："></a>自定义分隔符：</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">arduinoCopy code</span><br><span class="line">awk -F&#x27;,&#x27; &#x27;&#123; print $1 &#125;&#x27; file.txt</span><br></pre></td></tr></table></figure>

<p>这将使用逗号作为字段分隔符，并打印每行的第一个字段。</p>
<h4 id="聚合数据："><a href="#聚合数据：" class="headerlink" title="聚合数据："></a>聚合数据：</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">arduinoCopy code</span><br><span class="line">awk &#x27;&#123; sum += $1 &#125; END &#123; print sum &#125;&#x27; file.txt</span><br></pre></td></tr></table></figure>

<p>这将计算文件中第一个字段的总和，并在处理完所有行后打印结果。</p>
<h4 id="根据模式匹配和条件过滤："><a href="#根据模式匹配和条件过滤：" class="headerlink" title="根据模式匹配和条件过滤："></a>根据模式匹配和条件过滤：</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">arduinoCopy code</span><br><span class="line">awk &#x27;/pattern/ &#123; print $0 &#125;&#x27; file.txt</span><br></pre></td></tr></table></figure>

<p>这将打印文件中包含指定模式的行。</p>
<h4 id="使用内置变量和计算："><a href="#使用内置变量和计算：" class="headerlink" title="使用内置变量和计算："></a>使用内置变量和计算：</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">arduinoCopy code</span><br><span class="line">awk &#x27;&#123; total += $1 &#125; END &#123; avg = total / NR; print avg &#125;&#x27; file.txt</span><br></pre></td></tr></table></figure>

<p>这将计算文件中第一个字段的平均值，并在处理完所有行后打印结果。</p>
<h4 id="格式化输出："><a href="#格式化输出：" class="headerlink" title="格式化输出："></a>格式化输出：</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">swiftCopy code</span><br><span class="line">awk &#x27;&#123; printf &quot;%-10s %s\n&quot;, $1, $2 &#125;&#x27; file.txt</span><br></pre></td></tr></table></figure>

<p>这将按照指定格式打印每行的第一个和第二个字段。</p>
<h4 id="计算文件中数字的总和："><a href="#计算文件中数字的总和：" class="headerlink" title="计算文件中数字的总和："></a>计算文件中数字的总和：</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">arduinoCopy code</span><br><span class="line">awk &#x27;&#123; sum += $1 &#125; END &#123; print sum &#125;&#x27; file.txt</span><br></pre></td></tr></table></figure>

<p>这将计算文件中第一个字段的总和，并在处理完所有行后打印结果。</p>
<h4 id="统计文件中行数："><a href="#统计文件中行数：" class="headerlink" title="统计文件中行数："></a>统计文件中行数：</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">arduinoCopy code</span><br><span class="line">awk &#x27;END &#123; print NR &#125;&#x27; file.txt</span><br></pre></td></tr></table></figure>

<p>这将统计文件中的行数，并在处理完所有行后打印结果。</p>
<h4 id="根据条件过滤并打印特定字段："><a href="#根据条件过滤并打印特定字段：" class="headerlink" title="根据条件过滤并打印特定字段："></a>根据条件过滤并打印特定字段：</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">swiftCopy code</span><br><span class="line">awk &#x27;$1 &gt; 10 &#123; print $2 &#125;&#x27; file.txt</span><br></pre></td></tr></table></figure>

<p>这将根据第一个字段大于10的条件过滤行，并打印对应行的第二个字段。</p>
<h4 id="使用内置函数计算平均值："><a href="#使用内置函数计算平均值：" class="headerlink" title="使用内置函数计算平均值："></a>使用内置函数计算平均值：</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">arduinoCopy code</span><br><span class="line">awk &#x27;&#123; total += $1 &#125; END &#123; print total/NR &#125;&#x27; file.txt</span><br></pre></td></tr></table></figure>

<p>这将计算文件中第一个字段的平均值，并在处理完所有行后打印结果。</p>
<h4 id="根据多个条件进行过滤和处理："><a href="#根据多个条件进行过滤和处理：" class="headerlink" title="根据多个条件进行过滤和处理："></a>根据多个条件进行过滤和处理：</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">swiftCopy code</span><br><span class="line">awk &#x27;$1 &gt; 10 &amp;&amp; $2 == &quot;John&quot; &#123; print $0 &#125;&#x27; file.txt</span><br></pre></td></tr></table></figure>

<p>这将根据第一个字段大于10且第二个字段等于”John”的条件过滤行，并打印符合条件的整行内容。</p>
<h4 id="从命令输出中读取数据："><a href="#从命令输出中读取数据：" class="headerlink" title="从命令输出中读取数据："></a>从命令输出中读取数据：</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">swiftCopy code</span><br><span class="line">ps aux | awk &#x27;$1 == &quot;root&quot; &#123; print $2 &#125;&#x27;</span><br></pre></td></tr></table></figure>

<p>这将从 <code>ps</code> 命令的输出中读取数据，并打印所有属于 “root” 用户的进程 ID。</p>
<h2 id="sed"><a href="#sed" class="headerlink" title="sed"></a>sed</h2><blockquote>
<p><code>sed</code>（Stream Editor）是一种流式文本编辑器，用于对文本进行转换、替换、删除、插入等操作。它逐行读取输入，并根据给定的规则对文本进行处理。<code>sed</code> 常用于命令行环境下的文本处理任务，可用于脚本编程、文本转换、数据处理等多种场景。</p>
<p>以下是 <code>sed</code> 的一些特点和功能：</p>
<ol>
<li>流式处理：<code>sed</code> &#x3D;&#x3D;逐行读取&#x3D;&#x3D;输入文本，并在内存中进行处理，而不是将整个文件加载到内存中。这使得它能够处理非常大的文件，而不会受到内存限制。</li>
<li>行选择：<code>sed</code> 可以根据行号、正则表达式或行范围等条件选择特定的行进行处理。可以删除、修改、打印或插入行。</li>
<li>替换文本：<code>sed</code> 可以使用基本的替换命令 <code>s/pattern/replacement/</code> 来查找并替换文本。可以选择替换第一次出现的模式、每行的所有模式或只在特定位置进行替换。</li>
<li>插入和追加文本：<code>sed</code> 可以在指定位置插入新文本行或在文件的末尾追加文本行。</li>
<li>删除行：<code>sed</code> 可以删除包含特定模式的行，或者根据行号或行范围删除行。</li>
<li>脚本支持：<code>sed</code> 支持使用脚本文件进行批量处理。可以将一系列 <code>sed</code> 命令写入脚本文件，并在需要时通过命令行调用。</li>
<li>正则表达式：<code>sed</code> 支持正则表达式，可以根据复杂的模式匹配和转换文本。可以使用正则表达式进行模式匹配、捕获组、反向引用等操作。</li>
<li>命令行选项：<code>sed</code> 提供了多种选项，例如 <code>-i</code> 可以直接修改原始文件、<code>-n</code> 可以抑制输出等。</li>
</ol>
<p>总之，<code>sed</code> 是一种强大而灵活的文本处理工具，适用于各种文本转换和处理任务。它的语法和功能非常丰富，可以根据不同的需求进行定制和扩展。</p>
</blockquote>
<blockquote>
<p>Linux sed 命令是利用脚本来处理文本文件。</p>
<p>sed 可依照脚本的指令来处理、编辑文本文件。</p>
<p>Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。</p>
</blockquote>
<h3 id="语法-2"><a href="#语法-2" class="headerlink" title="语法"></a>语法</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sed [-hnV][-e&lt;script&gt;][-f&lt;script文件&gt;][文本文件]</span><br></pre></td></tr></table></figure>

<h3 id="参数说明："><a href="#参数说明：" class="headerlink" title="参数说明："></a><strong>参数说明</strong>：</h3><ul>
<li>-e ：直接在命令行模式上进行sed动作编辑，此为默认选项;</li>
<li>-f ：将sed的动作写在一个文件内，用–f filename 执行filename内的sed动作;</li>
<li>-i ：直接修改文件内容;</li>
<li>-n ：只打印模式匹配的行；</li>
<li>-r ：支持扩展表达式;</li>
<li>-h或–help：显示帮助；</li>
<li>-V或–version：显示版本信息。</li>
</ul>
<h3 id="动作说明："><a href="#动作说明：" class="headerlink" title="动作说明："></a><strong>动作说明</strong>：</h3><ul>
<li>a ：新增， a 的后面可以接字串，而这些字串会在新的一行出现(目前的下一行)～</li>
<li>c ：取代， c 的后面可以接字串，这些字串可以取代 n1,n2 之间的行！</li>
<li>d ：删除，因为是删除啊，所以 d 后面通常不接任何东东；</li>
<li>i ：插入， i 的后面可以接字串，而这些字串会在新的一行出现(目前的上一行)；</li>
<li>p ：打印，亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行～</li>
<li>s ：取代，可以直接进行取代的工作哩！通常这个 s 的动作可以搭配正则表达式！例如 1,20s&#x2F;old&#x2F;new&#x2F;g 就是啦！</li>
</ul>
<h3 id="示例-5"><a href="#示例-5" class="headerlink" title="示例"></a>示例</h3><h4 id="实例1-替换配置文件信息"><a href="#实例1-替换配置文件信息" class="headerlink" title="实例1(替换配置文件信息)"></a>实例1(替换配置文件信息)</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sed -e &quot;s/end=disabled/end=enabled/g&quot; -e &quot;s/793667410/13232017067/g&quot; sedTest.txt</span><br></pre></td></tr></table></figure>

<h4 id="替换字符串："><a href="#替换字符串：" class="headerlink" title="替换字符串："></a>替换字符串：</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">arduinoCopy code</span><br><span class="line">sed &#x27;s/foo/bar/&#x27; file.txt</span><br></pre></td></tr></table></figure>

<p>这将在 <code>file.txt</code> 文件中查找第一次出现的 “foo” 字符串，并将其替换为 “bar”。</p>
<h4 id="替换字符串并修改原文件："><a href="#替换字符串并修改原文件：" class="headerlink" title="替换字符串并修改原文件："></a>替换字符串并修改原文件：</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">arduinoCopy code</span><br><span class="line">sed -i &#x27;s/foo/bar/&#x27; file.txt</span><br></pre></td></tr></table></figure>

<p>这将在 <code>file.txt</code> 文件中查找第一次出现的 “foo” 字符串，并将其替换为 “bar”。同时，该命令会修改原始文件。</p>
<h4 id="全局替换字符串："><a href="#全局替换字符串：" class="headerlink" title="全局替换字符串："></a>全局替换字符串：</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">arduinoCopy code</span><br><span class="line">sed &#x27;s/foo/bar/g&#x27; file.txt</span><br></pre></td></tr></table></figure>

<p>这将在 <code>file.txt</code> 文件中查找所有的 “foo” 字符串，并将其替换为 “bar”。</p>
<h4 id="删除行："><a href="#删除行：" class="headerlink" title="删除行："></a>删除行：</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">arduinoCopy code</span><br><span class="line">sed &#x27;/pattern/d&#x27; file.txt</span><br></pre></td></tr></table></figure>

<p>这将删除包含指定模式的行。</p>
<h4 id="打印特定行："><a href="#打印特定行：" class="headerlink" title="打印特定行："></a>打印特定行：</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">arduinoCopy code</span><br><span class="line">sed -n &#x27;5p&#x27; file.txt</span><br></pre></td></tr></table></figure>

<p>这将打印文件中的第五行。</p>
<h4 id="打印行范围："><a href="#打印行范围：" class="headerlink" title="打印行范围："></a>打印行范围：</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">arduinoCopy code</span><br><span class="line">sed -n &#x27;2,5p&#x27; file.txt</span><br></pre></td></tr></table></figure>

<p>这将打印文件中从第二行到第五行的内容。</p>
<h4 id="插入文本："><a href="#插入文本：" class="headerlink" title="插入文本："></a>插入文本：</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">vbnetCopy code</span><br><span class="line">sed &#x27;2i\This is a new line.&#x27; file.txt</span><br></pre></td></tr></table></figure>

<p>这将在文件的第二行之前插入一行文本。</p>
<h4 id="追加文本："><a href="#追加文本：" class="headerlink" title="追加文本："></a>追加文本：</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">swiftCopy code</span><br><span class="line">sed &#x27;$a\This is the last line.&#x27; file.txt</span><br></pre></td></tr></table></figure>

<p>这将在文件的最后一行之后追加一行文本。</p>
<h4 id="执行多个操作："><a href="#执行多个操作：" class="headerlink" title="执行多个操作："></a>执行多个操作：</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">bashCopy code</span><br><span class="line">cat file.txt | sed -e &#x27;s/apple/orange/g&#x27; -e &#x27;s/cat/dog/&#x27;</span><br></pre></td></tr></table></figure>

<p>这将先将所有的 “apple” 替换为 “orange”，然后将结果中的 “cat” 替换为 “dog”。</p>
<h1 id="shell脚本"><a href="#shell脚本" class="headerlink" title="shell脚本"></a>shell脚本</h1><h2 id="常见变量"><a href="#常见变量" class="headerlink" title="常见变量"></a>常见变量</h2><ul>
<li>$# : 判断传入的参数的个数</li>
<li>$? : 判断上一条指令是否执行成功</li>
<li>$1 : 表示传入的参数,依此类推</li>
<li>$(basename $文件名) : 即去除文件名的目录部分和后缀部分。返回一个字符串参数的基本文件名称。</li>
</ul>
<blockquote>
<p><code>$NF</code>是一个特殊的awk变量，它代表当前输入行（或记录）的最后一个字段（或列）的值。在awk中，字段是以空格或制表符等分隔符进行分隔的行中的部分。</p>
<p>在awk中，<code>$1</code>代表第一个字段，<code>$2</code>代表第二个字段，以此类推，而 <code>$NF</code>代表最后一个字段。</p>
<p>以下是一个示例，演示如何在awk中使用 <code>$NF</code>：</p>
</blockquote>
<blockquote>
<p>${var:0:4}截取指定的字符串</p>
</blockquote>
<h2 id="EOF"><a href="#EOF" class="headerlink" title="EOF"></a>EOF</h2><blockquote>
<p>将一整段代码作为内容,可以用于登录数据库后再进行数据库操作</p>
<p>EOF &gt;&gt; &#x2F;dev&#x2F;null</p>
<p>insert …..</p>
<p>EOF</p>
</blockquote>
<h1 id="docker"><a href="#docker" class="headerlink" title="docker"></a>docker</h1><h2 id="查看已有的镜像"><a href="#查看已有的镜像" class="headerlink" title="查看已有的镜像"></a>查看已有的镜像</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_">$ </span><span class="language-bash">docker images</span></span><br></pre></td></tr></table></figure>

<h2 id="查看已经启动的容器"><a href="#查看已经启动的容器" class="headerlink" title="查看已经启动的容器"></a>查看已经启动的容器</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_">$ </span><span class="language-bash">docker ps</span></span><br></pre></td></tr></table></figure>

<h2 id="docker提交镜像并以此镜像进行部署"><a href="#docker提交镜像并以此镜像进行部署" class="headerlink" title="docker提交镜像并以此镜像进行部署"></a>docker提交镜像并以此镜像进行部署</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_">$ </span><span class="language-bash">docker stop A</span></span><br><span class="line"><span class="meta prompt_">$ </span><span class="language-bash">docker commit A imageA <span class="comment">#将容器commit提交成为一个镜像</span></span></span><br><span class="line"><span class="meta prompt_">$ </span><span class="language-bash">docker <span class="built_in">rm</span> A <span class="comment">#删除原镜像</span></span></span><br><span class="line"><span class="meta prompt_">$ </span><span class="language-bash">docker run -d -p 80:80 --name A imageA <span class="comment">#启动新镜像</span></span></span><br></pre></td></tr></table></figure>
</article><div class="post-copyright"><div class="post-copyright__author"><span class="post-copyright-meta">Author: </span><span class="post-copyright-info"><a href="https://gitee.com/Lyra3/blog">lyra</a></span></div><div class="post-copyright__type"><span class="post-copyright-meta">Link: </span><span class="post-copyright-info"><a href="https://gitee.com/Lyra3/blog/2023/09/07/linux%E5%B8%B8%E7%94%A8/">https://gitee.com/Lyra3/blog/2023/09/07/linux%E5%B8%B8%E7%94%A8/</a></span></div><div class="post-copyright__notice"><span class="post-copyright-meta">Copyright Notice: </span><span class="post-copyright-info">All articles in this blog are licensed under <a target="_blank" rel="noopener" href="https://creativecommons.org/licenses/by-nc-sa/4.0/">CC BY-NC-SA 4.0</a> unless stating additionally.</span></div></div><div class="tag_share"><div class="post-meta__tag-list"><a class="post-meta__tags" href="/blog/tags/Linux-%E5%B8%B8%E7%94%A8/">Linux 常用</a></div><div class="post_share"><div class="social-share" data-image="/blog/img/avatar.png" data-sites="facebook,twitter,wechat,weibo,qq"></div><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/butterfly-extsrc/sharejs/dist/css/share.min.css" media="print" onload="this.media='all'"><script src="https://cdn.jsdelivr.net/npm/butterfly-extsrc/sharejs/dist/js/social-share.min.js" defer></script></div></div><nav class="pagination-post" id="pagination"><div class="next-post pull-full"><a href="/blog/2023/08/15/kubebuilder%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/" title="kubebuilder环境搭建"><div class="cover" style="background: var(--default-bg-color)"></div><div class="pagination-info"><div class="label">Next Post</div><div class="next_info">kubebuilder环境搭建</div></div></a></div></nav></div><div class="aside-content" id="aside-content"><div class="card-widget card-info"><div class="is-center"><div class="avatar-img"><img src="/blog/img/avatar.png" onerror="this.onerror=null;this.src='/blog/img/friend_404.gif'" alt="avatar"/></div><div class="author-info__name">lyra</div><div class="author-info__description"></div></div><div class="card-info-data site-data is-center"><a href="/blog/archives/"><div class="headline">Articles</div><div class="length-num">4</div></a><a href="/blog/tags/"><div class="headline">Tags</div><div class="length-num">2</div></a><a href="/blog/categories/"><div class="headline">Categories</div><div class="length-num">4</div></a></div><a id="card-info-btn" target="_blank" rel="noopener" href="https://github.com/wwwviolet"><i class="fab fa-github"></i><span>Follow Me</span></a><div class="card-info-social-icons is-center"><a class="social-icon" href="https://github.com/wwwviolet" target="_blank" title="Github"><i class="fab fa-github" style="color: #24292e;"></i></a><a class="social-icon" href="mailto:lqwwymail@163.com" target="_blank" title="Email"><i class="fas fa-envelope" style="color: #4a7dbe;"></i></a></div></div><div class="card-widget card-announcement"><div class="item-headline"><i class="fas fa-bullhorn fa-shake"></i><span>Announcement</span></div><div class="announcement_content">share</div></div><div class="sticky_layout"><div class="card-widget" id="card-toc"><div class="item-headline"><i class="fas fa-stream"></i><span>Catalog</span><span class="toc-percentage"></span></div><div class="toc-content"><ol class="toc"><li class="toc-item toc-level-1"><a class="toc-link" href="#linux%E6%96%87%E4%BB%B6%E7%BB%93%E6%9E%84"><span class="toc-text">linux文件结构</span></a></li><li class="toc-item toc-level-1"><a class="toc-link" href="#%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95%E6%8C%87%E4%BB%A4"><span class="toc-text">文件目录指令</span></a><ol class="toc-child"><li class="toc-item toc-level-2"><a class="toc-link" href="#ls"><span class="toc-text">ls</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E5%8F%82%E6%95%B0"><span class="toc-text">参数</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E5%85%B6%E4%BB%96"><span class="toc-text">其他</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E7%A4%BA%E4%BE%8B"><span class="toc-text">示例</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#%E7%A4%BA%E4%BE%8B1-%E6%89%80%E6%9C%89%E5%AD%90%E7%9B%AE%E5%BD%95"><span class="toc-text">示例1(所有子目录)</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E7%A4%BA%E4%BE%8B2-%E9%80%9A%E9%85%8D%E7%AC%A6"><span class="toc-text">示例2(通配符)</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E7%A4%BA%E4%BE%8B3-%E5%AD%90%E7%9B%AE%E5%BD%95"><span class="toc-text">示例3(子目录)</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E7%A4%BA%E4%BE%8B4-%E9%80%9A%E9%85%8D%E7%AC%A6"><span class="toc-text">示例4(通配符)</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E7%A4%BA%E4%BE%8B5-%E6%89%A7%E8%A1%8C%E6%96%87%E4%BB%B6-%E7%9B%AE%E5%BD%95"><span class="toc-text">示例5(执行文件&#x2F;目录)</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E7%A4%BA%E4%BE%8B6-%E6%96%87%E4%BB%B6-%E7%9B%AE%E5%BD%95%E6%95%B0"><span class="toc-text">示例6(文件&#x2F;目录数)</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E7%A4%BA%E4%BE%8B7-%E7%BB%9D%E5%AF%B9%E8%B7%AF%E5%BE%84"><span class="toc-text">示例7(绝对路径)</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E7%A4%BA%E4%BE%8B8-%E7%BB%9D%E5%AF%B9%E8%B7%AF%E5%BE%84%E5%8C%85%E6%8B%AC%E9%9A%90%E8%97%8F%E6%96%87%E4%BB%B6"><span class="toc-text">示例8(绝对路径包括隐藏文件)</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E7%A4%BA%E4%BE%8B9-%E9%80%92%E5%BD%92%E7%BB%9D%E5%AF%B9%E8%B7%AF%E5%BE%84%E5%8C%85%E6%8B%AC%E9%9A%90%E8%97%8F%E6%96%87%E4%BB%B6"><span class="toc-text">示例9(递归绝对路径包括隐藏文件)</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E7%A4%BA%E4%BE%8B10"><span class="toc-text">示例10</span></a></li></ol></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#mkdir"><span class="toc-text">mkdir</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#cat"><span class="toc-text">cat</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#tail"><span class="toc-text">tail</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E5%8F%82%E6%95%B0-1"><span class="toc-text">参数</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E7%A4%BA%E4%BE%8B-1"><span class="toc-text">示例</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AE%9E%E4%BE%8B1%EF%BC%9A%E6%98%BE%E7%A4%BA%E6%96%87%E4%BB%B6%E6%9C%AB%E5%B0%BE%E5%86%85%E5%AE%B9"><span class="toc-text">实例1：显示文件末尾内容</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AE%9E%E4%BE%8B2%EF%BC%9A%E5%BE%AA%E7%8E%AF%E6%9F%A5%E7%9C%8B%E6%96%87%E4%BB%B6%E5%86%85%E5%AE%B9"><span class="toc-text">实例2：循环查看文件内容</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AE%9E%E4%BE%8B3%EF%BC%9A%E4%BB%8E%E7%AC%AC10%E8%A1%8C%E5%BC%80%E5%A7%8B%E6%98%BE%E7%A4%BA%E6%96%87%E4%BB%B6"><span class="toc-text">实例3：从第10行开始显示文件</span></a></li></ol></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#cp"><span class="toc-text">cp</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#rm"><span class="toc-text">rm</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#mv"><span class="toc-text">mv</span></a></li></ol></li><li class="toc-item toc-level-1"><a class="toc-link" href="#du"><span class="toc-text">du</span></a><ol class="toc-child"><li class="toc-item toc-level-2"><a class="toc-link" href="#%E6%9F%A5%E7%9C%8B%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F"><span class="toc-text">查看环境变量</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E8%AE%BE%E7%BD%AE%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F"><span class="toc-text">设置环境变量</span></a><ol class="toc-child"><li class="toc-item toc-level-5"><a class="toc-link" href="#%E8%AE%BE%E7%BD%AE%E5%8F%98%E9%87%8F%E7%9A%84%E4%B8%89%E7%A7%8D%E6%96%B9%E6%B3%95"><span class="toc-text">设置变量的三种方法</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#%E4%BD%BF%E7%94%A8unset%E5%88%A0%E9%99%A4%E6%8C%87%E5%AE%9A%E7%9A%84%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F"><span class="toc-text">使用unset删除指定的环境变量</span></a></li></ol></li></ol></li></ol></li></ol></li><li class="toc-item toc-level-1"><a class="toc-link" href="#%E6%96%87%E4%BB%B6%E6%9F%A5%E6%89%BE%E6%8C%87%E4%BB%A4"><span class="toc-text">文件查找指令</span></a><ol class="toc-child"><li class="toc-item toc-level-2"><a class="toc-link" href="#find"><span class="toc-text">find</span></a></li></ol></li><li class="toc-item toc-level-1"><a class="toc-link" href="#%E4%BC%A0%E9%80%92%E5%8F%82%E6%95%B0%E6%8C%87%E4%BB%A4"><span class="toc-text">传递参数指令</span></a><ol class="toc-child"><li class="toc-item toc-level-2"><a class="toc-link" href="#xargs"><span class="toc-text">xargs</span></a></li></ol></li><li class="toc-item toc-level-1"><a class="toc-link" href="#%E5%86%85%E5%AD%98%E7%A3%81%E7%9B%98%E7%AE%A1%E7%90%86%E6%8C%87%E4%BB%A4"><span class="toc-text">内存磁盘管理指令</span></a><ol class="toc-child"><li class="toc-item toc-level-2"><a class="toc-link" href="#lsblk"><span class="toc-text">lsblk</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E9%80%89%E9%A1%B9"><span class="toc-text">选项</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E5%AE%9E%E4%BE%8B"><span class="toc-text">实例</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E7%A3%81%E7%9B%98%E6%89%A9%E5%AE%B9"><span class="toc-text">磁盘扩容</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E6%96%B9%E5%BC%8F%E4%B8%80-%E7%BB%99-%E5%88%86%E5%8C%BA%E6%89%A9%E5%AE%B9"><span class="toc-text">方式一(给 &#x2F; 分区扩容)</span></a></li></ol></li></ol></li><li class="toc-item toc-level-1"><a class="toc-link" href="#%E6%96%87%E4%BB%B6%E6%89%93%E5%8C%85%E4%B8%8A%E4%BC%A0%E5%92%8C%E4%B8%8B%E8%BD%BD"><span class="toc-text">文件打包上传和下载</span></a><ol class="toc-child"><li class="toc-item toc-level-2"><a class="toc-link" href="#tar"><span class="toc-text">tar</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#gzip"><span class="toc-text">gzip</span></a></li></ol></li><li class="toc-item toc-level-1"><a class="toc-link" href="#%E5%85%B6%E4%BB%96%E6%8C%87%E4%BB%A4"><span class="toc-text">其他指令</span></a><ol class="toc-child"><li class="toc-item toc-level-2"><a class="toc-link" href="#wc"><span class="toc-text">wc</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E5%8F%82%E6%95%B0-2"><span class="toc-text">参数</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E7%A4%BA%E4%BE%8B-2"><span class="toc-text">示例</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#%E7%A4%BA%E4%BE%8B1%EF%BC%9A%E6%9F%A5%E7%9C%8B%E6%96%87%E4%BB%B6%E7%9A%84%E5%AD%97%E8%8A%82%E6%95%B0%E3%80%81%E5%AD%97%E6%95%B0%E3%80%81%E8%A1%8C%E6%95%B0"><span class="toc-text">示例1：查看文件的字节数、字数、行数</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E7%A4%BA%E4%BE%8B2%EF%BC%9A%E7%94%A8wc%E5%91%BD%E4%BB%A4%E6%80%8E%E4%B9%88%E5%81%9A%E5%88%B0%E5%8F%AA%E6%89%93%E5%8D%B0%E7%BB%9F%E8%AE%A1%E6%95%B0%E5%AD%97%E4%B8%8D%E6%89%93%E5%8D%B0%E6%96%87%E4%BB%B6%E5%90%8D"><span class="toc-text">示例2：用wc命令怎么做到只打印统计数字不打印文件名</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E7%A4%BA%E4%BE%8B3%EF%BC%9A%E7%94%A8%E6%9D%A5%E7%BB%9F%E8%AE%A1%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%E4%B8%8B%E7%9A%84%E6%96%87%E4%BB%B6%E6%95%B0"><span class="toc-text">示例3：用来统计当前目录下的文件数</span></a></li></ol></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#diff"><span class="toc-text">diff</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E5%91%BD%E4%BB%A4%E6%A0%BC%E5%BC%8F"><span class="toc-text">命令格式</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E5%91%BD%E4%BB%A4%E5%8A%9F%E8%83%BD"><span class="toc-text">命令功能</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E5%8F%82%E6%95%B0-3"><span class="toc-text">参数</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E7%A4%BA%E4%BE%8B-3"><span class="toc-text">示例</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AE%9E%E4%BE%8B1%EF%BC%9A%E6%AF%94%E8%BE%83%E4%B8%A4%E4%B8%AA%E6%96%87%E4%BB%B6"><span class="toc-text">实例1：比较两个文件</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AE%9E%E4%BE%8B2%EF%BC%9A%E5%B9%B6%E6%8E%92%E6%A0%BC%E5%BC%8F%E8%BE%93%E5%87%BA"><span class="toc-text">实例2：并排格式输出</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AE%9E%E4%BE%8B3%EF%BC%9A%E4%B8%8A%E4%B8%8B%E6%96%87%E8%BE%93%E5%87%BA%E6%A0%BC%E5%BC%8F"><span class="toc-text">实例3：上下文输出格式</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AE%9E%E4%BE%8B4%EF%BC%9A%E7%BB%9F%E4%B8%80%E6%A0%BC%E5%BC%8F%E8%BE%93%E5%87%BA"><span class="toc-text">实例4：统一格式输出</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AE%9E%E4%BE%8B5%EF%BC%9A%E6%AF%94%E8%BE%83%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%8D%E5%90%8C-%E6%AF%94%E8%BE%83%E7%9B%AE%E5%BD%95"><span class="toc-text">实例5：比较文件夹不同(比较目录)</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AE%9E%E4%BE%8B6%EF%BC%9A%E6%AF%94%E8%BE%83%E4%B8%A4%E4%B8%AA%E6%96%87%E4%BB%B6%E4%B8%8D%E5%90%8C%EF%BC%8C%E5%B9%B6%E7%94%9F%E4%BA%A7%E8%A1%A5%E4%B8%81"><span class="toc-text">实例6：比较两个文件不同，并生产补丁</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AE%9E%E4%BE%8B7%EF%BC%9A%E6%89%93%E8%A1%A5%E4%B8%81"><span class="toc-text">实例7：打补丁</span></a></li></ol></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#cut"><span class="toc-text">cut</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E8%AF%AD%E6%B3%95"><span class="toc-text">语法</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E5%8F%82%E6%95%B0-4"><span class="toc-text">参数:</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E7%A4%BA%E4%BE%8B-4"><span class="toc-text">示例</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AE%9E%E4%BE%8B1"><span class="toc-text">实例1</span></a></li></ol></li></ol></li></ol></li><li class="toc-item toc-level-1"><a class="toc-link" href="#%E6%96%87%E6%9C%AC%E5%A4%84%E7%90%86%E6%8C%87%E4%BB%A4"><span class="toc-text">文本处理指令</span></a><ol class="toc-child"><li class="toc-item toc-level-2"><a class="toc-link" href="#grep"><span class="toc-text">grep</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#1%EF%BC%8E%E5%91%BD%E4%BB%A4%E6%A0%BC%E5%BC%8F"><span class="toc-text">1．命令格式</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#2%EF%BC%8E%E5%91%BD%E4%BB%A4%E5%8A%9F%E8%83%BD"><span class="toc-text">2．命令功能</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#3%EF%BC%8E%E5%91%BD%E4%BB%A4%E5%8F%82%E6%95%B0"><span class="toc-text">3．命令参数</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#4%EF%BC%8E%E8%A7%84%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F"><span class="toc-text">4．规则表达式</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#5%EF%BC%8E%E4%BD%BF%E7%94%A8%E5%AE%9E%E4%BE%8B"><span class="toc-text">5．使用实例</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AE%9E%E4%BE%8B1%EF%BC%9A%E6%9F%A5%E6%89%BE%E6%8C%87%E5%AE%9A%E8%BF%9B%E7%A8%8B"><span class="toc-text">实例1：查找指定进程</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AE%9E%E4%BE%8B2%EF%BC%9A%E6%9F%A5%E6%89%BE%E6%8C%87%E5%AE%9A%E8%BF%9B%E7%A8%8B%E4%B8%AA%E6%95%B0"><span class="toc-text">实例2：查找指定进程个数</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AE%9E%E4%BE%8B3%EF%BC%9A%E4%BB%8E%E6%96%87%E4%BB%B6%E4%B8%AD%E8%AF%BB%E5%8F%96%E5%85%B3%E9%94%AE%E8%AF%8D%E8%BF%9B%E8%A1%8C%E6%90%9C%E7%B4%A2"><span class="toc-text">实例3：从文件中读取关键词进行搜索</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AE%9E%E4%BE%8B4%EF%BC%9A%E4%BB%8E%E6%96%87%E4%BB%B6%E4%B8%AD%E8%AF%BB%E5%8F%96%E5%85%B3%E9%94%AE%E8%AF%8D%E8%BF%9B%E8%A1%8C%E6%90%9C%E7%B4%A2-%E4%B8%94%E6%98%BE%E7%A4%BA%E8%A1%8C%E5%8F%B7"><span class="toc-text">实例4：从文件中读取关键词进行搜索 且显示行号</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AE%9E%E4%BE%8B5%EF%BC%9A%E4%BB%8E%E6%96%87%E4%BB%B6%E4%B8%AD%E6%9F%A5%E6%89%BE%E5%85%B3%E9%94%AE%E8%AF%8D"><span class="toc-text">实例5：从文件中查找关键词</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AE%9E%E4%BE%8B6%EF%BC%9A%E4%BB%8E%E5%A4%9A%E4%B8%AA%E6%96%87%E4%BB%B6%E4%B8%AD%E6%9F%A5%E6%89%BE%E5%85%B3%E9%94%AE%E8%AF%8D"><span class="toc-text">实例6：从多个文件中查找关键词</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AE%9E%E4%BE%8B7%EF%BC%9Agrep%E4%B8%8D%E6%98%BE%E7%A4%BA%E6%9C%AC%E8%BA%AB%E8%BF%9B%E7%A8%8B"><span class="toc-text">实例7：grep不显示本身进程</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AE%9E%E4%BE%8B8%EF%BC%9A%E6%89%BE%E5%87%BA%E5%B7%B2w%E5%BC%80%E5%A4%B4%E7%9A%84%E8%A1%8C%E5%86%85%E5%AE%B9"><span class="toc-text">实例8：找出已w开头的行内容</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AE%9E%E4%BE%8B9%EF%BC%9A%E8%BE%93%E5%87%BA%E9%9D%9Ew%E5%BC%80%E5%A4%B4%E7%9A%84%E8%A1%8C%E5%86%85%E5%AE%B9"><span class="toc-text">实例9：输出非w开头的行内容</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AE%9E%E4%BE%8B10%EF%BC%9A%E8%BE%93%E5%87%BA%E4%BB%A5hat%E7%BB%93%E5%B0%BE%E7%9A%84%E8%A1%8C%E5%86%85%E5%AE%B9"><span class="toc-text">实例10：输出以hat结尾的行内容</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AE%9E%E4%BE%8B11%EF%BC%9A%E6%98%BE%E7%A4%BA%E5%8C%85%E5%90%ABon%E6%88%96%E8%80%85on%E5%AD%97%E7%AC%A6%E7%9A%84%E5%86%85%E5%AE%B9%E8%A1%8C"><span class="toc-text">实例11：显示包含on或者on字符的内容行</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AE%9E%E4%BE%8B12%EF%BC%9A%E6%98%BE%E7%A4%BA%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%E4%B8%8B%E9%9D%A2%E4%BB%A5-txt-%E7%BB%93%E5%B0%BE%E7%9A%84%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89%E5%8C%85%E5%90%AB%E6%AF%8F%E4%B8%AA%E5%AD%97%E7%AC%A6%E4%B8%B2%E8%87%B3%E5%B0%91%E6%9C%897%E4%B8%AA%E8%BF%9E%E7%BB%AD%E5%B0%8F%E5%86%99%E5%AD%97%E7%AC%A6%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E8%A1%8C"><span class="toc-text">实例12：显示当前目录下面以.txt 结尾的文件中的所有包含每个字符串至少有7个连续小写字符的字符串的行</span></a></li></ol></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#awk"><span class="toc-text">awk</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E8%AF%AD%E6%B3%95-1"><span class="toc-text">语法</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84%EF%BC%9A"><span class="toc-text">基本结构：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E9%BB%98%E8%AE%A4%E6%93%8D%E4%BD%9C%EF%BC%9A"><span class="toc-text">默认操作：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AD%97%E6%AE%B5%E5%92%8C%E5%AD%97%E6%AE%B5%E5%88%86%E9%9A%94%E7%AC%A6%EF%BC%9A"><span class="toc-text">字段和字段分隔符：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%86%85%E7%BD%AE%E5%8F%98%E9%87%8F%EF%BC%9A"><span class="toc-text">内置变量：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E6%9D%A1%E4%BB%B6%E8%AF%AD%E5%8F%A5%EF%BC%9A"><span class="toc-text">条件语句：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%BE%AA%E7%8E%AF%EF%BC%9A"><span class="toc-text">循环：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%86%85%E7%BD%AE%E5%87%BD%E6%95%B0%EF%BC%9A"><span class="toc-text">内置函数：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E8%BE%93%E5%87%BA%E6%A0%BC%E5%BC%8F%E6%8E%A7%E5%88%B6%EF%BC%9A"><span class="toc-text">输出格式控制：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#BEGIN-%E5%92%8C-END-%E5%9D%97%EF%BC%9A"><span class="toc-text">BEGIN 和 END 块：</span></a></li></ol></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E4%BD%BF%E7%94%A8%E7%A4%BA%E4%BE%8B"><span class="toc-text">使用示例</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#%E6%89%93%E5%8D%B0%E6%96%87%E4%BB%B6%E5%86%85%E5%AE%B9%EF%BC%9A"><span class="toc-text">打印文件内容：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E6%89%93%E5%8D%B0%E7%89%B9%E5%AE%9A%E5%AD%97%E6%AE%B5%EF%BC%9A"><span class="toc-text">打印特定字段：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E4%BD%BF%E7%94%A8%E6%9D%A1%E4%BB%B6%E8%AF%AD%E5%8F%A5%EF%BC%9A"><span class="toc-text">使用条件语句：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E8%87%AA%E5%AE%9A%E4%B9%89%E5%88%86%E9%9A%94%E7%AC%A6%EF%BC%9A"><span class="toc-text">自定义分隔符：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E8%81%9A%E5%90%88%E6%95%B0%E6%8D%AE%EF%BC%9A"><span class="toc-text">聚合数据：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E6%A0%B9%E6%8D%AE%E6%A8%A1%E5%BC%8F%E5%8C%B9%E9%85%8D%E5%92%8C%E6%9D%A1%E4%BB%B6%E8%BF%87%E6%BB%A4%EF%BC%9A"><span class="toc-text">根据模式匹配和条件过滤：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E4%BD%BF%E7%94%A8%E5%86%85%E7%BD%AE%E5%8F%98%E9%87%8F%E5%92%8C%E8%AE%A1%E7%AE%97%EF%BC%9A"><span class="toc-text">使用内置变量和计算：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E6%A0%BC%E5%BC%8F%E5%8C%96%E8%BE%93%E5%87%BA%EF%BC%9A"><span class="toc-text">格式化输出：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E8%AE%A1%E7%AE%97%E6%96%87%E4%BB%B6%E4%B8%AD%E6%95%B0%E5%AD%97%E7%9A%84%E6%80%BB%E5%92%8C%EF%BC%9A"><span class="toc-text">计算文件中数字的总和：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E7%BB%9F%E8%AE%A1%E6%96%87%E4%BB%B6%E4%B8%AD%E8%A1%8C%E6%95%B0%EF%BC%9A"><span class="toc-text">统计文件中行数：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E6%A0%B9%E6%8D%AE%E6%9D%A1%E4%BB%B6%E8%BF%87%E6%BB%A4%E5%B9%B6%E6%89%93%E5%8D%B0%E7%89%B9%E5%AE%9A%E5%AD%97%E6%AE%B5%EF%BC%9A"><span class="toc-text">根据条件过滤并打印特定字段：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E4%BD%BF%E7%94%A8%E5%86%85%E7%BD%AE%E5%87%BD%E6%95%B0%E8%AE%A1%E7%AE%97%E5%B9%B3%E5%9D%87%E5%80%BC%EF%BC%9A"><span class="toc-text">使用内置函数计算平均值：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E6%A0%B9%E6%8D%AE%E5%A4%9A%E4%B8%AA%E6%9D%A1%E4%BB%B6%E8%BF%9B%E8%A1%8C%E8%BF%87%E6%BB%A4%E5%92%8C%E5%A4%84%E7%90%86%EF%BC%9A"><span class="toc-text">根据多个条件进行过滤和处理：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E4%BB%8E%E5%91%BD%E4%BB%A4%E8%BE%93%E5%87%BA%E4%B8%AD%E8%AF%BB%E5%8F%96%E6%95%B0%E6%8D%AE%EF%BC%9A"><span class="toc-text">从命令输出中读取数据：</span></a></li></ol></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#sed"><span class="toc-text">sed</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E8%AF%AD%E6%B3%95-2"><span class="toc-text">语法</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E5%8F%82%E6%95%B0%E8%AF%B4%E6%98%8E%EF%BC%9A"><span class="toc-text">参数说明：</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E5%8A%A8%E4%BD%9C%E8%AF%B4%E6%98%8E%EF%BC%9A"><span class="toc-text">动作说明：</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E7%A4%BA%E4%BE%8B-5"><span class="toc-text">示例</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AE%9E%E4%BE%8B1-%E6%9B%BF%E6%8D%A2%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E4%BF%A1%E6%81%AF"><span class="toc-text">实例1(替换配置文件信息)</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E6%9B%BF%E6%8D%A2%E5%AD%97%E7%AC%A6%E4%B8%B2%EF%BC%9A"><span class="toc-text">替换字符串：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E6%9B%BF%E6%8D%A2%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%B9%B6%E4%BF%AE%E6%94%B9%E5%8E%9F%E6%96%87%E4%BB%B6%EF%BC%9A"><span class="toc-text">替换字符串并修改原文件：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%85%A8%E5%B1%80%E6%9B%BF%E6%8D%A2%E5%AD%97%E7%AC%A6%E4%B8%B2%EF%BC%9A"><span class="toc-text">全局替换字符串：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%88%A0%E9%99%A4%E8%A1%8C%EF%BC%9A"><span class="toc-text">删除行：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E6%89%93%E5%8D%B0%E7%89%B9%E5%AE%9A%E8%A1%8C%EF%BC%9A"><span class="toc-text">打印特定行：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E6%89%93%E5%8D%B0%E8%A1%8C%E8%8C%83%E5%9B%B4%EF%BC%9A"><span class="toc-text">打印行范围：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E6%8F%92%E5%85%A5%E6%96%87%E6%9C%AC%EF%BC%9A"><span class="toc-text">插入文本：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E8%BF%BD%E5%8A%A0%E6%96%87%E6%9C%AC%EF%BC%9A"><span class="toc-text">追加文本：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E6%89%A7%E8%A1%8C%E5%A4%9A%E4%B8%AA%E6%93%8D%E4%BD%9C%EF%BC%9A"><span class="toc-text">执行多个操作：</span></a></li></ol></li></ol></li></ol></li><li class="toc-item toc-level-1"><a class="toc-link" href="#shell%E8%84%9A%E6%9C%AC"><span class="toc-text">shell脚本</span></a><ol class="toc-child"><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%B8%B8%E8%A7%81%E5%8F%98%E9%87%8F"><span class="toc-text">常见变量</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#EOF"><span class="toc-text">EOF</span></a></li></ol></li><li class="toc-item toc-level-1"><a class="toc-link" href="#docker"><span class="toc-text">docker</span></a><ol class="toc-child"><li class="toc-item toc-level-2"><a class="toc-link" href="#%E6%9F%A5%E7%9C%8B%E5%B7%B2%E6%9C%89%E7%9A%84%E9%95%9C%E5%83%8F"><span class="toc-text">查看已有的镜像</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E6%9F%A5%E7%9C%8B%E5%B7%B2%E7%BB%8F%E5%90%AF%E5%8A%A8%E7%9A%84%E5%AE%B9%E5%99%A8"><span class="toc-text">查看已经启动的容器</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#docker%E6%8F%90%E4%BA%A4%E9%95%9C%E5%83%8F%E5%B9%B6%E4%BB%A5%E6%AD%A4%E9%95%9C%E5%83%8F%E8%BF%9B%E8%A1%8C%E9%83%A8%E7%BD%B2"><span class="toc-text">docker提交镜像并以此镜像进行部署</span></a></li></ol></li></ol></div></div><div class="card-widget card-recent-post"><div class="item-headline"><i class="fas fa-history"></i><span>Recent Post</span></div><div class="aside-list"><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/blog/2023/09/07/linux%E5%B8%B8%E7%94%A8/" title="linux 常用">linux 常用</a><time datetime="2023-09-06T22:42:27.000Z" title="Created 2023-09-07 06:42:27">2023-09-07</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/blog/2023/08/15/kubebuilder%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/" title="kubebuilder环境搭建">kubebuilder环境搭建</a><time datetime="2023-08-15T14:16:06.526Z" title="Created 2023-08-15 22:16:06">2023-08-15</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/blog/2023/08/14/mysql%E9%83%A8%E7%BD%B2/" title="mysql部署">mysql部署</a><time datetime="2023-08-14T15:32:43.794Z" title="Created 2023-08-14 23:32:43">2023-08-14</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/blog/2023/08/14/k8s%E9%83%A8%E7%BD%B2/" title="k8s部署">k8s部署</a><time datetime="2023-08-14T12:27:33.377Z" title="Created 2023-08-14 20:27:33">2023-08-14</time></div></div></div></div></div></div></main><footer id="footer"><div id="footer-wrap"><div class="copyright">&copy;2020 - 2023 By lyra</div><div class="framework-info"><span>Framework </span><a target="_blank" rel="noopener" href="https://hexo.io">Hexo</a><span class="footer-separator">|</span><span>Theme </span><a target="_blank" rel="noopener" href="https://github.com/jerryc127/hexo-theme-butterfly">Butterfly</a></div></div></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="readmode" type="button" title="Read Mode"><i class="fas fa-book-open"></i></button><button id="darkmode" type="button" title="Switch Between Light And Dark Mode"><i class="fas fa-adjust"></i></button><button id="hide-aside-btn" type="button" title="Toggle between single-column and double-column"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="rightside_config" type="button" title="Setting"><i class="fas fa-cog fa-spin"></i></button><button class="close" id="mobile-toc-button" type="button" title="Table Of Contents"><i class="fas fa-list-ul"></i></button><button id="go-up" type="button" title="Back To Top"><span class="scroll-percent"></span><i class="fas fa-arrow-up"></i></button></div></div><div><script src="/blog/js/utils.js"></script><script src="/blog/js/main.js"></script><script src="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox/fancybox.umd.min.js"></script><div class="js-pjax"></div><script async data-pjax src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script></div></body></html>